在调试模式下运行Logback

55

我最近从log4j切换到logback,想知道是否有一种简单的方法可以像log4j的log4j.debug属性一样运行logback的调试模式。 我需要看看它从哪里获取了我的logback.xml

文档提到使用StatusPrinter打印logback的内部状态,但这将需要进行代码更改。

6个回答

80

[编辑]

这个问题在Logback 1.0.4中得到了修复。您现在可以使用-Dlogback.debug=true来启用对logback设置的调试。

--旧回答--

不幸的是,没有一种方法可以通过系统属性来启用调试。您必须在logback.xml中使用<configuration debug="true">。请提交一个功能请求。


4
特性已经被“修复”,并且包含在logback 1.0.4版本中。 - David Roussel
2
请明确一点,您现在可以通过系统属性启用Logback调试,例如-Dlogback.debug=true。 通过http://gordondickens.com/wordpress/2013/07/18/logback-config-showing-debug-level/。 - Rich Dougherty
1
除非您使用的是Groovy配置,否则目前无法启用此功能:在使用Groovy配置时设置logback.debug属性会在获取记录器时引发异常 - ben3000

7

这是我处理的方式。我设置了一个名为'log.level'的系统属性,然后在logback.xml中引用它。

编辑:缺点是必须始终设置'log.level'。我处理的方法是在我的主要方法中检查并将其设置为INFO,确保在第一次记录调用之前执行此操作。然后我可以在命令行上进行覆盖,并具有合理的默认值。

以下是我在logback.xml中的设置:

<configuration>
    <logger name="com.mycompany.project" level="${log.level}" />
    <logger name="httpclient" level="WARN" />
    <logger name="org.apache" level="WARN" />
    <logger name="org.hibernate" level="WARN" />
    <logger name="org.hibernate.cfg.AnnotationBinder" level="WARN" />
    <logger name="org.hibernate.cfg.annotations" level="WARN" />
    <logger name="org.quartz" level="WARN" />
    <logger name="org.springframework" level="WARN" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-16thread] %-5level %-35.35logger{30} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="${log.level:-INFO}">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

10
如果未定义属性,您可以在logback.xml文件中为其设置默认值,方法是像这样:<root level="${log.level:-info}">。这样一来,如果没有设置属性,您就不需要在主方法中设置它。 - Chirlo
谢谢,我没注意到。现在你提到了,我可以在文档中看到它:http://logback.qos.ch/manual/configuration.html#defaultValuesForVariables - David Roussel
感谢您的两条评论。在Eclipse中,我可以在运行配置中设置环境变量,以便在运行mvn站点时关闭日志记录,但在运行Eclipse中的单个测试时具有默认的调试级别。谢谢。 - Gene De Lisa
如果您喜欢我的回答,请点赞支持。这就是本网站的运作方式。 :-) - David Roussel
好答案,我最喜欢这个。 - undefined

2
您可以通过系统属性设置状态监听器类:
java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener ...

请参考:

请查看:Logback手册


2

我无法使用所选答案使其工作。但是,以下方法有效:

java -Dlogback.configurationFile=/path/to/config-debug.xml com.domain.Main

只需在服务器上添加一个文件(例如本例中的config-debug.xml),并在需要调试时将其保留在那里。如下所示。

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{dd-MMM-yyyy HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

使用上述-D参数运行您的应用程序。

当一切恢复正常时,删除-D参数并重新启动您的应用程序。

来源:第三章:Logback配置


1

嗯,这很简单。你可以使用以下方法之一:

log.level = debug

在Spring Boot的application.properties文件中。

或者您也可以在logback.xml的配置文件中设置此项。

<root level="${log.level}">
    <appender-ref ref="ANY_APPENDER" />
</root>

-1
在Eclipse中,您可以拥有多个运行配置。打开您的主类。转到Eclipse工具栏上的Debug下拉菜单,然后选择Debug Configurations。单击左上角的New launch configuration图标。为您的启动配置命名。在名称下面单击Arguments选项卡,然后输入-Dlog.level=debug或您想要的任何内容。单击Close或Debug。
您可以再次执行此操作,并指定-Dlog.level=warn等参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接