【问题标题】:log4j2 - configuration file foundlog4j2 - 找到配置文件
【发布时间】:2015-03-25 13:50:43
【问题描述】:

我使用的是 servlet 2.5,我按照说明设置了侦听器和过滤器,但我的 web 应用程序仍然抱怨找不到配置文件。我的侦听器、上下文参数、过滤器和过滤器映射都定义为我的 web.xml 中它们各自位置的第一个值。我确保 log4j-web-2.2.jar 也在我的类路径中。是否有其他选项可以从 spring bean 加载它们?我想根据 catalina.properties 中的值加载不同的配置文件。 有人可以请教吗?

 <listener>
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>classpath:*${sys:log4j2.xml.name}</param-value>

<filter>
    <filter-name>log4jServletFilter</filter-name>
    <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>log4jServletFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>ERROR</dispatcher>

</filter-mapping>

【问题讨论】:

    标签: spring log4j2


    【解决方案1】:

    经过大量的摆弄,我了解到使用类路径表示法我们不能使用系统变量。所以我采用了以下方法。这基本上允许我们根据我们的环境提供不同的文件名。此变量必须在 catalina.properties 中指定。

    <context-param>
        <param-name>log4jConfiguration</param-name>
        <param-value>/WEB-INF/config/${sys:log4j.fileName}</param-value>
    

    【讨论】:

      【解决方案2】:

      如果您的配置文件名为 log4j2.xml 并且位于 WEB-INF/ 目录中,那么您无需在 web.xml 中指定 log4jConfiguration 上下文参数。

      【讨论】:

      • 不幸的是,我的配置文件不是静态命名的。对于每种“类型”的环境,我都有一个文件。对于前 .dev、.prod 等。我希望根据 catalina.properties 中的值获取适当的文件。仅供参考,我编辑了问题以更好地展示我的场景。
      猜你喜欢
      • 2014-10-18
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 2018-01-02
      • 1970-01-01
      • 2018-08-27
      • 2016-10-24
      相关资源
      最近更新 更多