【问题标题】:Logback not logging for INFO and ERRORLogback 不记录 INFO 和 ERROR
【发布时间】:2017-11-15 11:18:02
【问题描述】:

我需要在单独的文件中记录信息和错误。我尝试了以下配置。虽然我得到了 CACHE-AUDIT 和 SERVICE_AUDIT 的日志,但没有打印任何信息和错误日志。我在这里缺少一些配置吗?

logback.xml

<property name="LOG_HOME" value="E:\\logs"/>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </layout>
</appender>

<appender name="CACHE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/cache-service.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>cache-service.%i.log.zip</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>7</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>
</appender>

<appender name="FILE-ERROR"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/error.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>error.%i.log.zip</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>7</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>
</appender>

<appender name="FILE-INFO"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/info.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>info.%i.log.zip</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>5</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>
</appender>

<appender name="SERVICE-AUDIT"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/service-audit.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>service-audit.%i.log.zip</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>5</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>
</appender>

<logger name="ch.base.cache" level="debug" additivity="false">
    <appender-ref ref="CACHE-AUDIT"/>
</logger>

<logger name="ch.base.service.client" level="debug" additivity="false">
    <appender-ref ref="SERVICE-AUDIT"/>
</logger>

<logger name="ch.base" level="info">
    <appender-ref ref="FILE-INFO"/>
</logger>

<logger name="ch.base" level="error">
    <appender-ref ref="FILE-ERROR"/>
</logger>

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

【问题讨论】:

    标签: spring logback logback-classic


    【解决方案1】:

    您有两个同名的记录器。带有level="error" 的那个肯定会阻止另一个得到低于 ERROR 的任何东西。虽然我不太确定为什么您也没有看到任何错误日志记录。

    尝试合并这两个块:

    <logger name="ch.base" level="info">
        <appender-ref ref="FILE-INFO"/>
    </logger>
    
    <logger name="ch.base" level="error">
        <appender-ref ref="FILE-ERROR"/>
    </logger>
    

    进入:

    <logger name="ch.base" level="info">
        <appender-ref ref="FILE-INFO"/>
        <appender-ref ref="FILE-ERROR"/>
    </logger>
    

    【讨论】:

    • 我按照您的描述更改了设置.. 现在信息和错误都打印在两个文件中.. 我可以在单独的文件中获取信息和错误..
    • 你确定吗?信息日志将同时包含 INFO 和 ERROR,但由于阈值过滤器,错误日志应该只包含 ERROR。无论如何,如果您想在信息日志中准确找到 INFO,请尝试使用 LevelFilter 而不是 ThresholdFilter
    • 我已经删除了 ThresholdFilter.. 只使用了级别.. 然后在两个文件中也打印了相同的日志.. 没有根据级别过滤器进行分离..
    • 你的意思是对appender进行级别过滤吗.. ..
    • 您可能需要LevelFilter 用于两个附加程序,每个都设置为所需的级别。不幸的是,我目前没有一个允许我进行实验的环境。请参阅文档:logback.qos.ch/manual/filters.html
    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2017-01-24
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多