从战争外部加载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

在我的应用程序中,我使用Log4j进行日志记录。目前,我将Log4j.xml放在WEB-INF/classes中。 下面是我用来加载log4j.xml文件的配置

<!-- 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
在log4jConfigLocation标记的内部


注意添加文件://如果路径是绝对路径(在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