【问题标题】:Log messages are not written in the log file日志消息未写入日志文件
【发布时间】:2012-01-16 12:09:25
【问题描述】:

我已经用 Log4j 配置了一个项目。我已经使用log4.properties 文件配置了 log4j。 在测试运行时,它会创建 myLog.log 文件,但不会将任何内容写入日志文件。 我们将 Appender 用作 RollingFileAppenderlog4j.rootLogger=DEBUG

任何人都可以提出可能导致此问题的原因吗?

这里是项目的 log4j.properties。

log4j.rootLogger= DEBUG, ConsoleAppender, Rolling 
log4j.appender.ConsoleAppender=org.apache.log4j.ConsoleAppender 
log4j.appender.ConsoleAppender.layout=org.apache.log4j.PatternLayout 

log4j.appender.ConsoleAppender.layout.ConversionPattern=%d %-2p %c.%M(): %m%n 
log4j.appender.Rolling=org.apache.log4j.RollingFileAppender 
log4j.appender.Rolling.MaxFileSize=5MB 
log4j.appender.Rolling.MaxBackupIndex=2 
log4j.appender.Rolling.File=D:\Logs\myProj.log 
log4j.appender.Rolling.layout = org.apache.log4j.PatternLayout 
log4j.appender.Rolling.layout.ConversionPattern=%d %-4p %c.%M(): %m%n 
## Following two lines have been removed now.
log4j.logger.com=WARN 
log4j.logger.org=WARN

在日志文件中收到日志:

2012-01-16 22:02:08,534 DEBUG org.apache.http.headers.receiveResponseHeader(): << content-type: application/json; charset=UTF-8
2012-01-16 22:02:08,534 DEBUG org.apache.http.headers.receiveResponseHeader(): << connection: close
2012-01-16 22:02:08,534 DEBUG org.apache.http.headers.receiveResponseHeader(): << content-length: 236
2012-01-16 22:02:08,550 DEBUG org.apache.http.headers.receiveResponseHeader(): << server: httpd.js
2012-01-16 22:02:08,550 DEBUG org.apache.http.headers.receiveResponseHeader(): << date: Tue, 17 Jan 2012 03:02:06 GMT
2012-01-16 22:02:08,566 DEBUG org.apache.http.wire.wire(): << "{"name":"clickElement","sessionId":"2fad55cf-670e-44f3-ab60-7d2f76f641e6","status":0,"value":"This action is final and cannot be undone?"}"
2012-01-16 22:02:08,566 DEBUG org.apache.http.impl.conn.DefaultClientConnection.shutdown(): Connection shut down
2012-01-16 22:02:08,566 DEBUG org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.releaseConnection(): Released connection is not reusable.
2012-01-16 22:02:08,566 DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute.freeEntry(): Releasing connection [HttpRoute[{}->http://127.0.0.1:7055]][null]
2012-01-16 22:02:08,566 DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute.notifyWaitingThread(): Notifying no-one, there are no waiting threads
2012-01-16 22:02:10,566 DEBUG org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.getConnection(): Get connection: HttpRoute[{}->http://127.0.0.1:7055], timeout = 120000
2012-01-16 22:02:10,566 DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(): [HttpRoute[{}->http://127.0.0.1:7055]] total kept alive: 0, total issued: 0, total allocated: 0 out of 2000
2012-01-16 22:02:10,566 DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getFreeEntry(): No free connections [HttpRoute[{}->http://127.0.0.1:7055]][null]
2012-01-16 22:02:10,566 DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(): Available capacity: 2000 out of 2000 [HttpRoute[{}->http://127.0.0.1:7055]][null]
2012-01-16 22:02:10,581 DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute.createEntry(): Creating new connection [HttpRoute[{}->http://127.0.0.1:7055]]
2012-01-16 22:02:10,597 DEBUG org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(): Connecting to 127.0.0.1:7055
2012-01-16 22:02:10,597 DEBUG org.apache.http.client.protocol.RequestAddCookies.process(): CookieSpec selected: best-match
2012-01-16 22:02:10,597 DEBUG org.apache.http.client.protocol.RequestAuthCache.process(): Auth cache not set in the context
2012-01-16 22:02:10,597 DEBUG org.apache.http.impl.client.DefaultHttpClient.tryExecute(): Attempt 1 to execute request
2012-01-16 22:02:10,597 DEBUG org.apache.http.impl.conn.DefaultClientConnection.sendRequestHeader(): Sending request: GET /hub/session/2fad55cf-670e-44f3-ab60-7d2f76f641e6/alert_text HTTP/1.1
2012-01-16 22:02:10,597 DEBUG org.apache.http.wire.wire(): >> "GET /hub/session/2fad55cf-670e-44f3-ab60-7d2f76f641e6/alert_text HTTP/1.1[\r][\n]"
2012-01-16 22:02:10,597 DEBUG org.apache.http.wire.wire(): >> "Accept: application/json, image/png[\r][\n]"
2012-01-16 22:02:10,597 DEBUG org.apache.http.wire.wire(): >> "Host: 127.0.0.1:7055[\r][\n]"
2012-01-16 22:02:10,597 DEBUG org.apache.http.wire.wire(): >> "Connection: Keep-Alive[\r][\n]"
2012-01-16 22:02:10,597 DEBUG org.apache.http.wire.wire(): >> "[\r][\n]"
2012-01-16 22:02:10,597 DEBUG org.apache.http.headers.sendRequestHeader(): >> GET /hub/session/2fad55cf-670e-44f3-ab60-7d2f76f641e6/alert_text HTTP/1.1
2012-01-16 22:02:10,597 DEBUG org.apache.http.headers.sendRequestHeader(): >> Accept: application/json, image/png
2012-01-16 22:02:10,597 DEBUG org.apache.http.headers.sendRequestHeader(): >> Host: 127.0.0.1:7055
2012-01-16 22:02:10,597 DEBUG org.apache.http.headers.sendRequestHeader(): >> Connection: Keep-Alive
2012-01-16 22:02:10,612 DEBUG org.apache.http.wire.wire(): << "HTTP/1.1 200 OK[\r][\n]"
2012-01-16 22:02:10,612 DEBUG org.apache.http.wire.wire(): << "content-type: application/json; charset=UTF-8[\r][\n]"
2012-01-16 22:02:10,612 DEBUG org.apache.http.wire.wire(): << "connection: close[\r][\n]"
2012-01-16 22:02:10,612 DEBUG org.apache.http.wire.wire(): << "content-length: 236[\r][\n]"
2012-01-16 22:02:10,612 DEBUG org.apache.http.wire.wire(): << "server: httpd.js[\r][\n]"
2012-01-16 22:02:10,612 DEBUG org.apache.http.wire.wire(): << "date: Tue, 17 Jan 2012 03:02:10 GMT[\r][\n]"
2012-01-16 22:02:10,612 DEBUG org.apache.http.wire.wire(): << "[\r][\n]"
2012-01-16 22:02:10,612 DEBUG org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(): Receiving response: HTTP/1.1 200 OK

【问题讨论】:

  • 显示您的log4j.properties的全部内容
  • 属性文件和您的 Java 日志记录代码在哪里?
  • 你能给我们看看代码吗?如果可以的话,还有记录器文件。也许 log4j.properties 文件中缺少记录器的类。
  • log4j.properties 保存在 src 文件夹中。
  • @PriWeb 然后把它打开并粘贴到这里

标签: java junit log4j


【解决方案1】:

首先,确保您的log4j.properties 已加载到类路径中。我假设该文件也可以在 WEB-INF/classes 目录中找到,如果它是一个 webapp。但是因为您说文件正在创建,所以我认为这不是问题。

所以,试试这个

log4j.rootLogger= DEBUG, Console, Rolling 
log4j.appender.Console=org.apache.log4j.ConsoleAppender 
log4j.appender.Console.layout=org.apache.log4j.PatternLayout 

log4j.appender.Console.layout.ConversionPattern=%d %-2p %c.%M(): %m%n 
log4j.appender.Rolling=org.apache.log4j.RollingFileAppender 
log4j.appender.Rolling.MaxFileSize=5MB 
log4j.appender.Rolling.MaxBackupIndex=2 
log4j.appender.Rolling.File=D:\Logs\myProj.log 
log4j.appender.Rolling.layout = org.apache.log4j.PatternLayout 
log4j.appender.Rolling.layout.ConversionPattern=%d %-4p %c.%M(): %m%n 

请注意,我已删除最后两行。

基本上,这些行将所有以comorg 开头的包的日志级别设置为WARN。因此,除非您记录了任何 WARN 消息,否则您不会在日志文件中看到任何内容。

您可以通过执行类似的操作来试验关卡

log4j.logger.com.foo.bar=DEBUG
log4j.logger.com.foo.bar.MyClass=TRACE

以上将在DEBUG 中打印所有com.foo.bar 日志,而将在TRACE 级别打印com.foo.bar.MyClass 日志。

【讨论】:

  • 谢谢。这很有帮助。但是当我看到日志时,没有任何语句来自我的 java 类。所有的日志语句都与其他包相关。我在问题中粘贴了部分日志。
  • @PriWeb 忍不住问,你在课堂上记录过什么吗?
【解决方案2】:

或更详细:不会启用来自日志级别

引用:

记录器中级别 p 的日志请求(分配或继承,以 适当的)级别 q,如果 p >= q 则启用。

给定记录器的每个启用的记录请求都将转发到 该记录器以及层次结构中更高的附加器。

见:http://logging.apache.org/log4j/1.2/manual.html

【讨论】:

  • 谢谢它的帮助。但是当我看到日志时,没有任何语句来自我的 java 类。所有的日志语句都与其他包相关。我在问题中粘贴了部分日志。之后我添加了 log4j.logger.org.apache.http=ERROR。现在我在我的日志中没有看到任何东西。我不知道为什么我的 java 类中的任何一行都没有记录到日志文件中。
  • @PriWeb - 您使用记录器的类的完全限定名称是什么?粘贴您创建记录器的方式以及您在日志语句中使用的日志级别。
  • 另外:您可以在运行配置中添加“-Dlog4j.debug="true"”,以查看 Log4J 是如何配置自身的(类路径上可能还有另一个 log4j.properties 吗?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 2016-05-08
相关资源
最近更新 更多