这已被多次询问,但我无法弄清楚过去已经回答的问题有什么问题。
我的log4j日志记录在12月31日运行正常。今天,1月2日,我回去工作的第一天没有记录任何内容。应记录的数据显示在控制台上,但不显示在日志文件中。我的log4j.properties如下。在最后一次登录工作和今天之间没有任何改变。
我的应用程序是基于servlet的,我发现catalina或localhost日志都没有错误。
我不知道会发生什么。有没有人有任何想法?
我刚刚意识到我在今天开始之前就该项目进行了SVN更新。我可能已经获得了一些jar文件的更新版本。罐子'碰撞'会导致log4j停止记录吗?
log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.logger.AppLogFile=DEBUG,AppLogFile
log4j.appender.AppLogFile.File=../logs/dbconnect.log
log4j.appender.AppLogFile=org.apache.log4j.RollingFileAppender
log4j.appender.AppLogFile.layout=org.apache.log4j.PatternLayout
log4j.appender.AppLogFile.layout.ConversionPattern=DBCONNECT %-22d{dd/MMM/yyyy HH:mm:ss} - %m%n
# manage logging for packages
log4j.category.org.springframework=ERROR
log4j.category.org.hibernate=ERROR
log4j.category.com.mchange.v2=ERROR
答案 0 :(得分:0)
我在这里回答我自己的问题。经过四个小时的搜索,我找到了答案。
当我做更新时,问题是来自SubVersion的第三方jar。昨天,开发人员在应用程序的不同部分添加了这个jar。
Log4j在查找“log4j.properties”之前查找“log4j.xml”。第三方jar包含一个log4j.xml,因此加载了一个并忽略了我的log4j.properties。 一旦我添加了log4j debug命令,这很容易找到。
所以,如果你发现自己处于这种状况,可以采取以下措施。
停止Tomcat
在%CATALINA_HOME%/ bin中创建一个名为setenv.bat的文件。将这些行添加到文件中:
REM Use this file to set either or both JAVA_OPTS, CATALINA_OPTS
REM Don't change startup.bat
set JAVA_OPTS=-Dlog4j.debug
保存并重新启动Tomcat
Log4j现在会将有用的信息(包括它正在使用的配置文件)记录到控制台。
当Tomcat启动应用程序时,Log4j会记录搜索配置文件。这是两个摘录;第一个显示我发生的事情,第二个显示我的情况的正常行为。
案例1:Log4j正在查找正确的位置,/ WEB-APPS / emscribe / WEB-INF / classes,但对于log4j.xml而言,不是log4j.properties
log4j: Trying to find [log4j.xml] using context classloader WebappClassLoader
context: /emscribe
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader: org.apache.catalina.loader.StandardClassLoader@1f7fd168
log4j: Using URL [jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/apache-tomcat-7.0.26/webapps/emscribe/WEB-INF/lib/dynamicreports-examples-3.0.0.jar!/log4j.xml] for automatic log4j configuration.
所以,这里Log4j在最近添加的第三方jar中发现了log4j.xml,并且没有再看了。
案例2:删除第三方jar后,log4j找到了正确的配置文件:
log4j: Trying to find [log4j.xml] using context classloader WebappClassLoader
context: /emscribe
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:org.apache.catalina.loader.StandardClassLoader@8b10bd5
log4j: Trying to find [log4j.xml] using WebappClassLoader
context: /emscribe
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:org.apache.catalina.loader.StandardClassLoader@8b10bd5class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader WebappClassLoader
context: /emscribe
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@8b10bd5
.
log4j: Using URL [file:/C:/Program%20Files/Apache%20Software%20Foundation/apache-tomcat-7.0.26/webapps/emscribe/WEB-INF/classes/log4j.properties] for automaticlog4j configuration.
log4j: Reading configuration from URL file:/C:/Program%20Files/Apache%20Software%20Foundation/apache-tomcat-7.0.26/webapps/emscribe/WEB-INF/classes/log4j.properties
我最终用等效的log4j.xml替换了log4j.properties,替换了第三方jar,并在jar中的jar4之前找到了我的log4j.xml。