【问题标题】:Logback multiple loggers not honouring levelLogback 多个记录器不尊重级别
【发布时间】:2016-12-13 11:39:09
【问题描述】:

我已将 logback.xml 定义为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">

    <jmxConfigurator />

    <appender name="ROOT_FILE_APPENDER"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <fieldNames>
                <timestamp>timestamp</timestamp>
                <version>[ignore]</version>
                <levelValue>[ignore]</levelValue>
            </fieldNames>
        </encoder>
        <file>root.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>root.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>$100MB</maxFileSize>
            <totalSizeCap>1GB</totalSizeCap>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="basic-text" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%X{Logging-CorrelationId} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <file>text.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>text.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <totalSizeCap>1GB</totalSizeCap>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="ERROR">
        <appender-ref ref="ROOT_FILE_APPENDER" />
    </root>

    <logger name="it.pkg.testpkg.service" additivity="true" level="INFO">
        <appender-ref ref="basic-text"/>
    </logger>

</configuration>

请注意,“root”记录器级别已设置为“ERROR”,而其他记录器级别已设置为“INFO”且 additivity=true。

我的 java 类的代码如下所示:

private static final Logger LOGGER = LoggerFactory.getLogger(it.pkg.testpkg.service.EchoService.class);

现在,问题是,当我将日志记录为:

LOGGER.info("Test Log");

日志条目出现在两个日志文件中,即使根记录器级别已设置为“错误”。但是,在我摆脱“it.pkg.testpkg.service”记录器的那一刻(通过注释掉或删除它),该条目停止进入根记录器。我不太确定这里发生了什么。

目前,我通过在“ROOT_FILE_APPENDER”中添加以下条目找到了一个临时解决方案:

<filter class="ch.qos.logback.classic.filter.LevelFilter">
     <level>ERROR</level>
     <onMatch>ACCEPT</onMatch>
     <onMismatch>DENY</onMismatch>
</filter>

但是,我不希望我的 appender 与特定的日志级别绑定。这是 Logback 的错误,还是我在这里做错了什么。

我正在使用以下 pom 依赖项:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.7</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.1.7</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.7</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.21</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: java logging logback


    【解决方案1】:

    通过additivity 到达的祖先记录器的行为会跳过日志级别检查。

    如果你的记录器

    <logger name="it.pkg.testpkg.service" additivity="true" level="INFO">
        <appender-ref ref="basic-text"/>
    </logger>
    

    接受日志语句

    LOGGER.info("Test Log");
    

    那么无论该记录器的日志级别如何,相应的输出都将发送到其祖先记录器。

    您始终可以将additivity 设置为false 并将根文件附加程序添加到您的记录器中

    <logger name="it.pkg.testpkg.service" additivity="false" level="INFO">
        <appender-ref ref="basic-text"/>
        <appender-ref ref="ROOT_FILE_APPENDER" />
    </logger>
    

    【讨论】:

    • 我们的目标是只有错误级别的日志才能到达根记录器。理想情况下,记录器应该始终尊重分配给它的级别。这种行为的目的是什么?
    • logger 应该始终遵守分配给它的级别 您没有登录到 root logger。您正在登录到 it.pkg.testpkg.service 记录器并继承其祖先的附加程序。这就是additivity的目的。
    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多