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

我已经把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> 

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

 log4j.rootLogger=debug,A1 

我有正确的地方在类pathlog4j.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

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

这意味着你需要指定一些appender(任何appender)到根logging器来logging发生。

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

当您的log4j.properties不存在于类path中时,您可能会遇到此错误。

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

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

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

在代码中:

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

… 稍后的

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

修复是在configuration加载后初始化logging器。

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

如果要为独立log4j应用程序进行configuration,则可以使用BasicConfigurator。 这个解决scheme对于像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); 

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

在我的情况下,解决scheme很简单。 你不需要在你的web.xml声明任何东西。

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

小心configuration文件名称。 如果您使用的是XML,则文件名为log4j.xml ,否则为log4j.properties

把这些行放在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

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

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

  • 我把日志configuration的条目[上下文参数和监听器]放在文件的顶部[在applicationContext.xml的条目之前]并且工作。

我猜这个订单很重要。

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