Java log4j2。如何获取log4j';什么是调试消息?

Java log4j2。如何获取log4j';什么是调试消息?,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,据我所知,log4j可以处理系统属性-Dlog4j.debug。如果你用它运行你的应用程序,你会得到log4j的调试输出 示例:java-Dlog4j.debug-jartest.jar Log4J2有类似的功能吗?我在启动和运行Log4J2时遇到了令人沮丧的困难,打印状态记录器也不例外。理论上,您可以在配置文件中使用status字段对其进行设置,但是我至今无法实现这一点 但是,您可以在主方法的开头运行以下操作: StatusConsoleListener listener = new Stat

据我所知,log4j可以处理系统属性-Dlog4j.debug。如果你用它运行你的应用程序,你会得到log4j的调试输出

示例:java-Dlog4j.debug-jartest.jar


Log4J2有类似的功能吗?

我在启动和运行Log4J2时遇到了令人沮丧的困难,打印状态记录器也不例外。理论上,您可以在配置文件中使用
status
字段对其进行设置,但是我至今无法实现这一点

但是,您可以在主方法的开头运行以下操作:

StatusConsoleListener listener = new StatusConsoleListener(Level.ALL);
StatusLogger.getLogger().registerListener(listener);
LogManager.getLogger(LogManager.ROOT_LOGGER_NAME); // initialize logger
请注意,您的
main()
类不能有任何静态记录器,否则将在调用之前对其进行初始化,这意味着加载状态消息将不会打印。

2018年1月更新:

在log4j2.10中,这很简单:只需使用系统属性运行程序
log4j2.debug
(无需任何值;空字符串即可)


关于状态记录器的当前(log4j-2.1)文档有点混乱。 基本上:

  • 在找到配置之前,可以使用系统属性
    org.apache.logging.log4j.simplelog.StatusLogger.level
    控制状态记录器级别
  • 找到配置后,可以使用“status”属性在配置文件中控制状态记录器级别,例如:

更新:在log4j-2.2中对进行了改进。

这可能会让人困惑,log4j 1.x命令行参数
-Dlog4j.debug
最接近的等效项是设置log4j 2.x“状态记录器”的
-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace
级别进行跟踪,并提供有关日志记录配置的详细输出

Log4J 1.x允许您使用
-Dlog4j.configuration在命令行上手动指定配置文件的位置=file:///var/lib/tomcat7/log4j.xml
其中配置文件位于
/var/lib/tomcat7/log4j.xml
。在Log4J 2.x中,参数
-Dlog4j.configurationFile中存在细微的差异=file:///var/lib/tomcat7/log4j.xml
,“配置文件”而不是“配置”


显然,您需要确保您的配置文件适合所使用的Log4J版本,XML结构在1.x和2.x之间有所不同。

以防有人需要以编程方式设置调试级别

// for your custom logger
Configurator.setLevel("com.name.of.logger", Level.DEBUG);
// for root logger
Configurator.setRootLevel(Level.DEBUG);
或不导入

org.apache.logging.log4j.core.config.Configurator.setLevel(
    "com.name.of.logger", 
    org.apache.logging.log4j.Level.DEBUG
);

java-Dlog4j2.debug-jar test.jar