没有找到记录器的追加器(org.springframework.web.context.ContextLoader)

时间:2016-08-06 07:55:16

标签: maven log4j slf4j appender

我继承了一堆代码,我注意到在tomcat日志中它说

  

log4j:WARN找不到记录器的appender   (org.springframework.web.context.ContextLoader)。 log4j:警告请   正确初始化log4j系统。 log4j:警告请参阅   http://logging.apache.org/log4j/1.2/faq.html#noconfig了解更多信息。

faq链接提到当找不到默认配置文件log4j.properties和log4j.xml且应用程序不执行显式配置时会发生这种情况。

我怎样才能弄清楚如何解决这个问题。 xml文件具有以下内容。所以我猜它是因为没有log4j.xml而是每个环境都有一个。假设这是问题,我该如何正确配置。

<bean id="log4jInitialization"
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
       <property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
       <property name="targetMethod" value="initLogging" />
       <property name="arguments">
          <list>
              <value>classpath:log4j-${environment}.properties</value>
          </list>
       </property>
    </bean>

1 个答案:

答案 0 :(得分:0)

几乎没有集体解决方案 -

  1. 在定义bean时,应该有一些属性文件,从中获取env的值(假设为${environment})。您必须注意将该值附加到文件名。应该存在于您的项目资源下。在您的情况下,文件名为log4j-env.properties

  2. 建议在不同环境下对不同环境使用不同的日志记录方法,以便将其修改为 -

    <property name="arguments">
        <list>
            <value>#{environment + '/log4j.properties'}</value>
        </list>
    </property>
    
  3. 您可以在web.xml而不是spring-context.xml中配置Log4j侦听器,因此在Spring启动之前它已经启动。 as -

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/${environment}/log4j.properties</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    
  4. 来源 - Initializing Log4J with Spring?

    注意 - 关于如何在运行时为environment分配正确的值,请按照How to replace a value in web.xml with a Maven property?