log4j:warn在web.xml中找不到记录器的附加器

cu6pst1q  于 2021-06-08  发布在  Kafka
关注(0)|答案(12)|浏览(433)

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

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

我错过了什么?

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "java.sun.com/dtd/web-app_2_3.dtd">
  4. <web-app>
  5. <context-param>
  6. <param-name>contextConfigLocation</param-name>
  7. <param-value>
  8. /WEB-INF/applicationContext.xml
  9. </param-value>
  10. </context-param>
  11. <context-param>
  12. <param-name>log4jConfigLocation</param-name>
  13. <param-value>/WEB-INF/classes/log4j.properties</param-value>
  14. </context-param>
  15. <listener>
  16. <listener-class>
  17. org.springframework.web.util.Log4jConfigListener
  18. </listener-class>
  19. </listener>
  20. <listener>
  21. <listener-class>
  22. org.springframework.web.context.ContextLoaderListener
  23. </listener-class>
  24. </listener>
  25. <servlet>
  26. <servlet-name>suara2</servlet-name>
  27. <servlet-class>
  28. org.springframework.web.servlet.DispatcherServlet
  29. </servlet-class>
  30. </servlet>
  31. <servlet-mapping>
  32. <servlet-name>suara2</servlet-name>
  33. <url-pattern>/*</url-pattern>
  34. </servlet-mapping>
  35. </web-app>
wdebmtf2

wdebmtf21#

对我来说,解决办法很简单。你不需要申报任何东西 web.xml .
因为您的项目是一个web应用程序,所以配置文件应该在 WEB-INF/classes 部署后。我建议您创建一个java资源文件夹( src/main/resources )做到这一点(最好的做法)。另一种方法是将配置文件放在 src/main/java .
注意配置文件名。如果您使用的是xml,则文件名为 log4j.xml ,否则 log4j.properties .

c86crjj0

c86crjj02#

如果这是整个log4j.properties文件,那么看起来您从未真正创建过记录器。你需要这样一句话:

  1. log4j.rootLogger=debug,A1
bbmckpt7

bbmckpt73#

如果log4j在任何地方都找不到文件“log4j.properties”或“log4j.xml”,就会看到这个警告。

8ljdwjyq

8ljdwjyq4#

我将log4j.properties放在类路径中的正确位置,但是仍然得到了这个警告以及任何直接使用它的东西。出于某种原因,通过commons日志记录使用log4j的代码似乎还不错。
如果您有:

  1. log4j.rootLogger=WARN

更改为:

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

根据http://logging.apache.org/log4j/1.2/manual.html:
根记录器是匿名的,但可以使用logger.getrootlogger()方法访问。没有附加到根目录的默认附加程序。
这意味着您需要为根日志记录器指定一些appender,任何appender,以便进行日志记录。
将控制台附加程序添加到rootlogger会使此抱怨消失。

展开查看全部
k2fxgqgv

k2fxgqgv5#

或者,您可以执行我所做的操作,并在加载日志配置文件之前定义记录器。这就像他们说的:“本末倒置。”
在代码中:

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

... 后来

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

修复程序是在配置加载后初始化记录器。
对于极客来说,这是“把笛卡尔的b4 d马”。

lg40wkob

lg40wkob6#

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

mbzjlibv

mbzjlibv7#

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

az31mfrm

az31mfrm8#

在web.xml中添加log4jexposewebapproot->false。对我有用:)

  1. <context-param>
  2. <param-name>log4jConfigLocation</param-name>
  3. <param-value>path/log4j.properties</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>log4jExposeWebAppRoot</param-name>
  7. <param-value>false</param-value>
  8. </context-param>
  9. <listener>
  10. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  11. </listener>
9q78igpj

9q78igpj9#

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

  1. <listener>
  2. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  3. </listener>
  4. <context-param>
  5. <param-name>log4jConfigLocation</param-name>
  6. <param-value>classpath:/main/resources/log4j.xml</param-value>
  7. </context-param>
nfeuvbwi

nfeuvbwi10#

如果要为独立的log4j应用程序进行配置,可以使用basicconfigurator。这种解决方案不适合像spring环境这样的web应用程序。
你需要写信-

  1. BasicConfigurator.configure();

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

kkbh8khc11#

如果仍然有用,请验证归档文件的名称,它必须是“log4j.properties”或“log4j.xml”(区分大小写),并按照“alain o'dea”的提示进行操作。我也犯了同样的错误,但是在做了这些修改之后,一切都很好。就像一个符咒:-)。希望这有帮助。

jjjwad0x

jjjwad0x12#

我也有同样的问题。相同的配置设置和相同的警告消息。对我起作用的是:改变条目的顺序。
我将日志配置的条目[上下文参数和侦听器]放在文件的顶部[在applicationcontext.xml的条目之前],然后它就工作了。
我想顺序很重要。

相关问题