2009-08-12 66 views
71

我已经把log4jConfigLocation在web.xml,但我仍然得到以下警告:的log4j:警告没有附加目的地可以用于记录发现在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> 
+0

参见问题[否追加程序可以为记录器(log4j的)可以找到?](http://stackoverflow.com/questions/12532339/no-appenders-could-be- found-for-loggerlog4j#) – PJTraill 2016-06-15 17:24:15

回答

41

如果这是整个log4j.properties文件,它看起来像你从来没有真正创建一个记录器。你需要这样一行:

log4j.rootLogger=debug,A1 
+1

@Kaffiene:似乎是你没有阅读完整个问题(在这种情况下,作者对该问题的评论提供了答案所指的信息) 。 @CodeGoat:+1阅读所有评论。 – 2011-05-19 17:16:21

+0

@FranciscoAlvarado我在类路径中有'log4j.properties'文件,仍然在控制台中显示警告。 – pudaykiran 2014-03-18 08:14:06

7

你会看到这则警告的log4j找不到文件“log4j.properties”或“的log4j.xml”的任何地方。

+2

我确认位置正确。因为当我将log4j.properties重命名为其他名称时,它会给出错误 – cometta 2009-08-12 13:37:27

16

当你log4j.properties中不存在的类路径您可能会得到这个错误。

这意味着你必须将log4j.properties进入src文件夹,并设置输出到bin文件夹,以便在运行时log4j.properties将bin文件夹中读取和你的错误将被轻松解决。

+1

我在桌面应用程序(Applet)中遇到同样的问题。文件log4j.properties已经在src文件夹中。如何“将输出设置到bin文件夹”? – 2015-11-16 16:27:52

24

我在类路径的正确位置有log4j.properties,并且仍然使用任何直接使用它的警告。由于某些原因,通过commons-logging使用log4j的代码似乎很好。

如果您有:

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是匿名的,但可以用Logger.getRootLogger访问() 方法。没有默认的appender连接到root。

这是什么意思是你需要指定一些appender,任何appender到根记录器来记录发生。

添加控制台 appender到rootLogger获取此投诉消失。

+1

我在哪里可以粘贴这个。 – pudaykiran 2014-03-18 08:15:21

+0

@udaykiranpulipati你可以将它粘贴到log4j.properties中。如果你没有log4j.properties在src/main/resources /中创建它,如果使用SBT/Gradle/Maven /等。否则,将它放在类路径根目录的地方(也许在src /中)。 – 2014-03-20 18:16:00

4

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

7

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

在代码:

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

... 后来

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

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

对于极客来说,它是“放笛卡尔b4 d马”。

3

就我而言,解决方案非常简单。您不需要在web.xml中声明任何内容。

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

小心配置文件名。如果您使用XML,则文件名为log4j.xml,否则log4j.properties

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); 
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

+0

您不需要指定log4jConfigLocation。它将从类路径中获取。 – Krishna 2014-04-22 07:24:56

+0

我试过了,但没有奏效。 – MariemJab 2014-04-22 11:19:00

+0

你有没有在class文件夹里面加入xml文件? – Krishna 2014-04-23 06:29:42

0

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

  • 我把条目日志配置[背景PARAM和 听众]上的文件[为 applicationContext.xml中的条目之前]顶部和它的工作。

订单很重要,我猜。

1

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

-3

您可以在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文件夹下

0

添加log4jExposeWebAppRoot - >在web.xml假。它与我:)

<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> 
相关问题