Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Log4j不';日志信息级别_Java_Logging_Log4j - Fatal编程技术网

Java Log4j不';日志信息级别

Java Log4j不';日志信息级别,java,logging,log4j,Java,Logging,Log4j,对于部署在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:/i

对于部署在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);
我用以下信息记录信息:

logger.info(theObjectToLog);
部署应用程序时,
debug.log
文件会获取我使用
logger.debug()
记录的所有内容,但会忽略我使用
logger.info()编写的所有内容。另一方面,
info.log
文件保持为空

最奇怪的是,在
debug.log
info.log
中,出现了一些JAR(如Hibernate Validator)在类路径中生成的信息和调试消息,但忽略了我试图登录代码的所有内容


有什么想法吗?

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

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

因此:

  • 请确保您的包名称是唯一的,并且没有被任何第三方库使用
  • 检查类路径中所有库中的log4j设置。它们不应包含覆盖您的常规设置
  • 确保您的记录器使用log4j.properties(您可以确保您在文件中所做的更改是否会像预期的那样影响记录器)
  • 如果可以,请确保最后加载log4j文件,以防任何第三方lib重置配置。他们不应该,但谁能阻止他们呢
通常,这应该是其中之一。如果不起作用,发布更明确的示例


祝你好运

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

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

-Dlog4j.debug=true

然后检查
SystemOut.log
文件。Log4J将抛出许多关于它读取的配置文件的跟踪信息

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

  • 将log4jjar文件与应用程序捆绑在一起
  • 将共享库与服务器关联。在该共享库中,放置Log4J配置文件

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

    您的根日志记录器在调试模式下打开日志属性

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