15

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

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

log4j 2 有类似的东西吗?

4

4 回答 4

12

2018 年 1 月更新:

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


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

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

更新:在 log4j-2.2 中改进了文档。

于 2015-02-19T03:39:34.150 回答
6

可能会造成混淆,最接近 Log4J 1.x 命令行参数的等效项-Dlog4j.debug-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace将 Log4J 2.x“状态记录器”级别设置为跟踪并提供有关日志记录配置的详细输出。

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 之间是不同的。

于 2015-05-13T10:17:53.803 回答
1

我在启动和运行 Log4J2 时遇到了令人沮丧的困难,打印 StatusLogger 也不例外。从理论上讲,您可以在配置文件中使用该status字段进行设置,但是到目前为止我还无法完成这项工作。

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

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

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

于 2013-12-09T06:51:02.900 回答
0

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

// 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
);
于 2020-05-27T17:15:17.293 回答