log4j:WARN在web.xml中找不到logger的appender

时间:2009-08-12 13:24:28

标签: java spring spring-mvc log4j

我已经将log4jConfigLocation放在web.xml中,但我仍然收到以下警告:

log4j:WARN No appenders could be found for logger ⤦
    ⤥ (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

我错过了什么?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
        </param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>suara2</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>suara2</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

13 个答案:

答案 0 :(得分:42)

如果这是整个log4j.properties文件,看起来你实际上从未真正创建过记录器。你需要一行:

log4j.rootLogger=debug,A1

答案 1 :(得分:28)

我将log4j.properties放在类路径中的正确位置,并且仍然使用直接使用它的任何内容得到此警告。由于某些原因,使用log4j通过commons-logging的代码似乎没问题。

如果你有:

log4j.rootLogger=WARN

将其更改为:

log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n

根据http://logging.apache.org/log4j/1.2/manual.html

  

根记录器是匿名的,但可以使用Logger.getRootLogger()方法访问。 root没有附加默认的appender。

这意味着你需要为根记录器指定一些appender,任何appender来进行记录。

控制台 appender添加到rootLogger会使此投诉消失。

答案 2 :(得分:18)

当类路径中不存在log4j.properties时,您可能会收到此错误。

这意味着您必须将log4j.properties移动到src文件夹并将输出设置为bin文件夹,以便在运行时log4j.properties从bin文件夹中读取并且您的错误将很容易解决

答案 3 :(得分:7)

如果log4j无法在任何地方找到“log4j.properties”或“log4j.xml”文件,您会看到此警告。

答案 4 :(得分:7)

或者,你可以做我做的事情,并在加载日志配置文件之前定义记录器。这就像他们说的那样:“把车放在马前。”

在代码中:

public static Logger logger = Logger.getLogger("RbReport");

... 稍后

PropertyConfigurator.configure(l4j);
logger = Logger.getLogger("RbReport");

修复是在加载配置后初始化记录器。

对于极客来说,这就是“把笛卡尔放到马上”。

答案 5 :(得分:5)

如果要配置独立的log4j应用程序,可以使用BasicConfigurator。此解决方案不适用于Spring环境等Web应用程序。

你需要写 -

BasicConfigurator.configure();

ServletContext sc = config.getServletContext();
String log4jLocation = config.getInitParameter("log4j-properties-location");
String webAppPath = sc.getRealPath("/");
String log4jProp = webAppPath + log4jLocation;
PropertyConfigurator.configure(log4jProp);

答案 6 :(得分:4)

如果仍然有帮助,请验证存档的名称,它必须是“log4j.properties”或“log4j.xml”(区分大小写),并按照“Alain O'Dea”的提示进行操作。 我提出了相同的错误,但在进行这些更改后,everthing工作正常。 就像一个魅力:-)。 希望这有帮助。

答案 7 :(得分:3)

就我而言,解决方案很简单。您无需在web.xml

中声明任何内容

由于您的项目是Web应用程序,因此部署后配置文件应位于WEB-INF/classes。 我建议你创建一个Java资源文件夹(src/main/resources)来做到这一点(最好的实践)。另一种方法是将配置文件放在src/main/java

请注意配置文件名。如果您使用的是XML,则文件名为log4j.xml,否则为log4j.properties

答案 8 :(得分:2)

将这些行放在web.xml的开头

    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

   <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:/main/resources/log4j.xml</param-value>
   </context-param>

有关详细信息,请参阅此链接:http://mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

答案 9 :(得分:1)

好的,我看到了很多答案,而且有些非常正确。但是,没有解决我的问题。在我的情况下的问题是UNIX文件系统权限有我在服务器上编辑的log4j.properties文件由root拥有。并且只能由root读取。但是,我正在部署的Web应用程序是tomcat无法读取文件,因为tomcat默认在Linux系统上以用户tomcat的身份运行。希望这可以帮助。所以解决方案是键入tomcat:tomcat log4j.properties&#39;在log4j.properties文件所在的目录中。

答案 10 :(得分:1)

添加log4jExposeWebAppRoot - &gt;在您的web.xml中为false。它适用于我:)

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>path/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jExposeWebAppRoot</param-name>
    <param-value>false</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

答案 11 :(得分:0)

我遇到了同样的问题。相同的配置设置和相同的警告消息。对我有用的是:  更改条目的顺序。

  • 我把日志配置的条目[上下文参数和 文件顶部的[listener] [输入之前] applicationContext.xml]并且工作正常。

我认为订单很重要。

答案 12 :(得分:-4)

您可以在xml文件中添加此行

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE beans PUBLIC
 "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

确保xml文件位于src文件夹