我已经将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>
答案 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)
我遇到了同样的问题。相同的配置设置和相同的警告消息。对我有用的是: 更改条目的顺序。
我认为订单很重要。
答案 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文件夹
下