从战争外部加载Log4j.xml
在我的应用程序中,我使用Log4j进行日志记录。目前,我将Log4j.xml放在WEB-INF/classes中。 下面是我用来加载log4j.xml文件的配置从战争外部加载Log4j.xml,log4j,log4j2,Log4j,Log4j2,在我的应用程序中,我使用Log4j进行日志记录。目前,我将Log4j.xml放在WEB-INF/classes中。 下面是我用来加载log4j.xml文件的配置 <!-- language: xml --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/l
<!-- language: xml -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4jConfigLocation
/WEB-INF/classes/log4j.xml
org.springframework.web.util.Log4jConfigListener
现在我需要将log4j.xml文件放在war文件之外。位置很可能是JBOSS_HOME/server/default/deploy/settings。在设置目录中,我需要放置log4j.xml
我试图通过编辑run.bat设置jboss类路径来加载它,如下所示
设置JBOSS_类路径=%RUN_类路径%;%JBOSS\u HOME%\server\default\deploy\settings
下面我在web.xml中使用了
<!-- language: xml -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4jConfigLocation
类路径:/log4j.xml
org.springframework.web.util.Log4jConfigListener
但它在部署应用程序时引发异常。例外是
java.lang.IllegalArgumentException:无效的'log4jConfigLocation'参数:无法将类路径资源[/log4j.xml]解析为URL,因为它不存在
现在我的问题是如何加载它。您可以简单地声明log4j配置的位置,如下所示:
log4jConfigLocation
${JBOSS_HOME}/server/default/deploy/settings/log4j.xml
记住在路径前面添加“file://”,否则它将在webapp文件夹中搜索
下面的例子对我很有用
log4jConfigLocation
文件://${MY_ENV_VAR}log4j.xml
org.springframework.web.util.Log4jConfigListener
我也有同样的例外
我使用了以下代码:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4jConfigLocation
类路径:log4j.properties
org.springframework.web.util.Log4jConfigListener
当我执行以下操作时,此异常消失:
mvn清洁安装
您可以使用:
- 文件://${MY_ENV_VAR}/log4j.xml
- 文件://${JBOSS_HOME}/server/default/deploy/settings/log4j.xml
注意添加文件://如果路径是绝对路径(在webapp文件夹之外)可以在web.xml文件中这样设置:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>file://${JBOSS_HOME}/domain/configuration/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4jConfigLocation
文件://${JBOSS_HOME}/domain/configuration/log4j.xml
org.springframework.web.util.Log4jConfigListener
注意:对于windows环境,以双“/”like“file://”开头。对于具有单个“/”like“file:/”的linux环境,的语法有点不同:使用log4jConfiguration
param。
请参阅以下答案:
我不想要lo4j.xml bcz的核心位置,如果你想更改它的位置,你必须在web.xml中修改它并构建war文件,这只是一个例子。您可以使用类似${DEPLOY_SETTINGS}/log4j.xml的东西,从哪里可以获得这个值。是否必须将其设置为系统属性?系统属性或环境变量。log4jConfigLocation通常用于包内自定义。如果它来自包外,最好使用jboss全局log4j配置。@atulkumar-v-jain您的编辑中断突出显示:-(Log4JConfigListener的javadoc说:“如果您想保持WAR未展开或WAR目录中不需要特定于应用程序的日志文件,请不要在应用程序中使用log4j安装程序(因此,不要使用Log4jConfigListener或Log4jConfigServlet)。“那你为什么要使用这个类呢?当
文件之后只有一个/
而不是两个时,我就能够让它工作。我希望我的建议能帮助其他人。这个答案最好的部分是classpath:log4j.properties