Log4j 2.如何获取log4j的调试消息?

时间:2013-10-24 19:04:21

标签: java logging log4j log4j2

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

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

log4j 2有类似内容吗?

4 个答案:

答案 0 :(得分:7)

2018年1月更新:

从Log4j 2.10开始,这很简单:只需使用系统属性log4j2.debug运行程序(不需要值;空字符串就可以了)。


状态记录器上的当前(log4j-2.1)文档有点令人困惑。 基本上是:

  • 在找到配置之前,可以使用系统属性org.apache.logging.log4j.simplelog.StatusLogger.level控制状态记录器级别。
  • 找到配置后,可以在配置文件中使用&#34; status&#34;来控制状态记录器级别。属性,例如:<Configuration status="trace">

更新:documentation在log4j-2.2中得到了改进。

答案 1 :(得分:3)

可能令人困惑,Log4J 1.x命令行参数-Dlog4j.debug的最近等效值是-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace,它设置了Log4J 2.x&#34;状态记录器&#34;要跟踪的级别并提供有关日志记录配置的详细输出。

Log4J 1.x允许您使用配置文件位于-Dlog4j.configuration=file:///var/lib/tomcat7/log4j.xml的{​​{1}}在命令行上手动指定配置文件的位置。在Log4J 2.x中,参数/var/lib/tomcat7/log4j.xml,&#39;配置文件&#39;之间存在细微差别。而不是&#39;配置&#39;。

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

答案 2 :(得分:1)

如果有人需要以编程方式设置DEBUG级别

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

OR,而无需导入

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

答案 3 :(得分:0)

让Log4J2启动并运行时遇到了令人沮丧的困难,打印StatusLogger也不例外。从理论上讲,您可以使用status字段在配置文件中进行设置,但是我无法实现这一目标。

您可以在main方法的开头运行以下命令:

StatusConsoleListener listener = new StatusConsoleListener(Level.ALL);
StatusLogger.getLogger().registerListener(listener);
LogManager.getLogger(LogManager.ROOT_LOGGER_NAME); // initialize logger

请注意,您的main()类不能有任何静态记录器,或者在调用它们之前它们将被初始化,这意味着不会打印加载状态消息。