我已经将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>
12条答案
按热度按时间wdebmtf21#
对我来说,解决办法很简单。你不需要申报任何东西
web.xml
.因为您的项目是一个web应用程序,所以配置文件应该在
WEB-INF/classes
部署后。我建议您创建一个java资源文件夹(src/main/resources
)做到这一点(最好的做法)。另一种方法是将配置文件放在src/main/java
.注意配置文件名。如果您使用的是xml,则文件名为
log4j.xml
,否则log4j.properties
.c86crjj02#
如果这是整个log4j.properties文件,那么看起来您从未真正创建过记录器。你需要这样一句话:
bbmckpt73#
如果log4j在任何地方都找不到文件“log4j.properties”或“log4j.xml”,就会看到这个警告。
8ljdwjyq4#
我将log4j.properties放在类路径中的正确位置,但是仍然得到了这个警告以及任何直接使用它的东西。出于某种原因,通过commons日志记录使用log4j的代码似乎还不错。
如果您有:
更改为:
根据http://logging.apache.org/log4j/1.2/manual.html:
根记录器是匿名的,但可以使用logger.getrootlogger()方法访问。没有附加到根目录的默认附加程序。
这意味着您需要为根日志记录器指定一些appender,任何appender,以便进行日志记录。
将控制台附加程序添加到rootlogger会使此抱怨消失。
k2fxgqgv5#
或者,您可以执行我所做的操作,并在加载日志配置文件之前定义记录器。这就像他们说的:“本末倒置。”
在代码中:
... 后来
修复程序是在配置加载后初始化记录器。
对于极客来说,这是“把笛卡尔的b4 d马”。
lg40wkob6#
好吧,我看到了很多答案和一些非常正确的答案。但是,没有人能解决我的问题。在我的例子中,问题是unix文件系统权限将我正在服务器上编辑的log4j.properties文件作为root所有。只有根才能读。但是,我部署到tomcat的web应用程序无法读取文件,因为默认情况下,tomcat在linux系统上以用户tomcat的身份运行。希望这有帮助。所以解决方法是输入'chown'tomcat:tomcat log4j.properties'在log4j.properties文件所在的目录中。
mbzjlibv7#
当您的
log4j.properties
类路径中不存在。这意味着你必须移动
log4j.properties
并将输出设置为bin文件夹,以便在运行时log4j.properties
将从bin文件夹中读取,您的错误将很容易解决。az31mfrm8#
在web.xml中添加log4jexposewebapproot->false。对我有用:)
9q78igpj9#
将这些行放在web.xml的开头:
nfeuvbwi10#
如果要为独立的log4j应用程序进行配置,可以使用basicconfigurator。这种解决方案不适合像spring环境这样的web应用程序。
你需要写信-
或
kkbh8khc11#
如果仍然有用,请验证归档文件的名称,它必须是“log4j.properties”或“log4j.xml”(区分大小写),并按照“alain o'dea”的提示进行操作。我也犯了同样的错误,但是在做了这些修改之后,一切都很好。就像一个符咒:-)。希望这有帮助。
jjjwad0x12#
我也有同样的问题。相同的配置设置和相同的警告消息。对我起作用的是:改变条目的顺序。
我将日志配置的条目[上下文参数和侦听器]放在文件的顶部[在applicationcontext.xml的条目之前],然后它就工作了。
我想顺序很重要。