【问题标题】:Logback configuration without explicit appender defining没有显式附加程序定义的 Logback 配置
【发布时间】:2017-08-29 09:10:40
【问题描述】:

以下 Logback 配置,其中一个记录器明确定义了它的 appender,另一个没有:

<configuration scan="true" scanPeriod="60 seconds">

<appender name="AMAZING_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>XXX</pattern>
    </encoder>
</appender>

<logger name="org.springframework">
    <level value="ERROR" />
</logger>

<logger name="com.company" additivity="false">
    <level value="INFO" />
    <appender-ref ref="AMAZING_APPENDER"/>
</logger>

</configuration>

如果有的话,没有明确附加器规范的记录器会使用什么附加器?

【问题讨论】:

    标签: logback


    【解决方案1】:

    “没有明确规范的记录器”我认为您指的是:&lt;logger name="org.springframework"&gt;

    如果是这样,则该记录器没有可用的附加程序,并且org.springframework 中的类发出的任何日志事件(无论日志级别如何)都将被忽略。

    如果您稍微调整 logback.xml 以添加以下内容:&lt;configuration debug="true"&gt; 您将看到这种性质的 WARN 事件...

    记录器 [...] 的上下文 [默认] 中没有附加程序

    ...org.springframework 中的类在 ERROR 级别发出日志事件时发出。

    如果您希望记录来自org.springframework 命名空间(或更一般地说,来自除com.company 之外的任何命名空间)的事件,那么您应该添加&lt;root&gt; 配置。例如:

    <root level="INFO">
        <appender-ref ref="AMAZING_APPENDER"/>
    </root>
    

    如果您添加一个根并将其指向AMAZING_APPENDER,那么您可能应该在logger name="com.company" 上设置additive="false",否则从com.company 命名空间记录的任何内容都将被记录两次。所以,也许你想要的配置是:

    <root level="INFO">
        <appender-ref ref="STANDARD_APPENDER"/>
    </root>
    

    【讨论】:

    • 好的,谢谢。我已经编辑了这个问题以反映它。所以为了有一个能够捕获发出的日志事件的配置,我需要添加一个 配置?
    • @Stas 是的,您需要 &lt;root&gt; 配置。我已更新答案以包含此内容。
    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    相关资源
    最近更新 更多