繁体   English   中英

Log4j不记录INFO级别

[英]Log4j doesn't log INFO Level

对于WebSphere Portal中部署的应用程序,我有以下log4j.properties文件:

log4j.rootLogger=DEBUG, InfoAppender, DebugAppender

log4j.appender.InfoAppender=org.apache.log4j.RollingFileAppender
log4j.appender.InfoAppender.Threshold=INFO
log4j.appender.InfoAppender.File=C:/info.log
log4j.appender.InfoAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.InfoAppender.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.Threshold=DEBUG
log4j.appender.DebugAppender.File=C:/debug.log
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%d %p [%c] - %m%n

当我编码时,我在类级别定义记录器:

private static Logger logger = Logger.getLogger(IWannaLogThis.class);

我用这个记录INFO消息:

logger.info(theObjectToLog);

当我部署我的应用程序时, debug.log文件中获得的一切,我登录logger.debug()但忽略一切我写logger.info() 另一方面, info.log文件保持为空。

最奇怪的是,在debug.loginfo.log出现了一些由类路径中的JARS(如Hibernate Validator)发出的INFO和DEBUG消息,但忽略了我尝试登录代码的所有内容。

有任何想法吗?

这很可能是与类加载相关的问题。 WebSphere Portal在内部使用Log4J,所以我猜你最终会使用WebSphere Portal提供的Log4J JAR文件以及它自己的Log4J属性。

您可以通过将以下内容添加到服务器实例的JVM参数来验证:

-Dlog4j.debug=true

然后检查SystemOut.log文件。 Log4J将吐出大量有关其读取的配置文件的跟踪信息。

避免这种情况的最佳方法是执行以下操作:

  1. 将Log4J JAR文件与您的应用程序捆绑在一起。
  2. 将共享库与服务器关联。 在该共享库中,放置Log4J配置文件。

作为第2步的替代方法,您可以将Log4J配置文件与应用程序本身捆绑在一起,但这会带来其自身的缺点(例如,每当执行Log4J配置更改时都必须重新打包应用程序)。

另一个常见问题是您在类路径中使用的JAR也使用log4j并且还设置了自己的appender。 因此,根据他们使用的设置以及您的类所在的包,这可能会导致您描述的问题。

所以:

  • 确保您的包名称是唯一的,并且不会被任何第三方库使用。
  • 检查类路径中所有库中的log4j设置。 它们不应包含覆盖您的常规设置。
  • 确保您的记录器使用您的log4j.properties(您可以确定您在文件中所做的更改是否会按预期影响您的记录器)。
  • 如果可以,请确保您的log4j内容最后加载,以防任何第三方库重置配置。 他们不应该,但谁能阻止他们。

通常,它应该是这些事情之一。 如果不起作用,请发布更明确的示例。

祝好运!

我过去所做的是为我要记录的类设置特定日志。 听起来您可以尝试将根记录器设置为INFO,看看是否能获得您想要的消息。 这是我的log4j属性文件的一小部分。 我为每个类设置了一个记录器,并将它分配给我的“data”appender,它定义了日志布局。 在记录器中,我指定了要记录的特定类,并单独设置其日志级别。 任何记录未在Loggers中定义的类我都使用rootCategory的默认日志级别。

log4j.rootCategory=INFO, rollingFile, stdout

#GetData Loggers
log4j.logger.com.myapp.data=INFO, data
log4j.logger.com.myapp.data.SybaseConnection=DEBUG, data
log4j.logger.com.myapp.data.GetData=ERROR, data


# data appender
log4j.appender.data=org.apache.log4j.RollingFileAppender
log4j.appender.data.layout=org.apache.log4j.PatternLayout
log4j.appender.data.File=c\:\\Program Files\\MyApp\\logs\\MyApp-data.log
log4j.appender.data.Append=true
log4j.appender.data.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n

root rootger在调试模式下打开日志属性,

在属性文件的第一行使用INFO而不是DEbug。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM