log4j今天未记录,两天前工作正常

oxosxuxt  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(166)

这个问题已经问了很多次了,但是我一直不能从过去已经回答的问题中弄清楚到底出了什么问题。
我的log4j日志在12月31日运行良好。今天,1月2日,我返回工作岗位的第一天,没有任何记录。应该记录的数据显示在控制台上,但没有在日志文件中。我的log4j.properties在下面。从上次日志运行到今天,它没有任何变化。
我的应用程序是基于servlet的,我在 Catalina 或localhost日志中没有看到任何错误。
我不知道会发生什么。有人知道吗?
我刚刚意识到我在今天开始之前对项目做了一个SVN更新。我可能得到了一些jar文件的更新版本。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
klh5stk1

klh5stk11#

我在这里回答我自己的问题。经过四个小时的搜索,我找到了答案。
这个问题是在我更新的时候从SubVersion上下载下来的第三方jar文件,这个jar文件是昨天一个开发者在应用程序的不同部分添加的。
Log4j在查找“www.example.com”之前先查找“log4j.xml”log4j.properties。第三方jar包含一个log4j.xml,因此加载了一个,而忽略了我的log4j.properties。一旦我添加了log4j调试命令,就很容易找到它。
所以,如果你发现自己处于这种情况下,下面是如何做到这一点。
停止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.properties用一个等价的log4j.xml替换了www.example.com,替换了第三方jar,并且我的log4j.xml在jar中的log4j.xml之前被找到。

wkftcu5l

wkftcu5l2#

我有一个不同的问题。我导入了一个项目,其中log4j.properties在那里,一切都配置好了。在属性文件中也有一个日志文件名,但在Eclipse中运行项目时没有写日志文件。
-Dlog4j.debug放在运行配置中的VM参数中有助于我进行分析,它打印了log4j在初始化自身期间所做的所有配置,找到了我必须在属性文件中更改的内容。

相关问题