java - logback中不同日志级别的不同日志文件

标签 java logback

我正在尝试使用以下 Logback 配置根据日志级别将日志信息插入到文件中。我想将日志信息插入到每个不同的文件中(例如将信息插入信息文件,将调试插入调试文件..)为了实现此目的,我使用下面的配置文件,这样我可以成功将信息信息插入信息文件。但我无法将调试信息插入调试文件。请帮助我解决这个问题。谢谢。

<property name="DEV_HOME" value="d:/log" />

<appender name="FILE-INSERT-DEBUG"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>DEBUG</level>
        <onMismatch>DENY</onMismatch>
    </filter>     

    <file>${DEV_HOME}/debug.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log.zip
                    </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>

<appender name="FILE-INSERT-INFO"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>

    </filter>     

    <file>${DEV_HOME}/INFO.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/INFO.%d{yyyy-MM-dd}.%i.log.zip
                    </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>

<logger name="com.code" level="Debug"
    additivity="false">
    <appender-ref ref="FILE-INSERT-DEBUG" />
</logger> 

    <logger name="com.code" level="Info"
    additivity="false">
    <appender-ref ref="FILE-INSERT-INFO" />
</logger>  



    <root level="ERROR">
    <appender-ref ref="FILE-INSERT-DEBUG" />
    <appender-ref ref="FILE-INSERT-INFO" />
</root>

最佳答案

1) 为什么调试日志没有被打印?

A log request of level p issued to a logger having an effective level q, is enabled if p >= q.

它假设级别的顺序如下:TRACE < DEBUG < INFO < WARN < ERROR。

将根记录器级别设置为“DEBUG”,这是它的默认值。

2) 更改您的 logback 配置如下:-

<appender name="FILE-INSERT-DEBUG"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>DEBUG</level>
        <onMismatch>DENY</onMismatch>
    </filter>     

    <file>${DEV_HOME}/debug.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log.zip
                    </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>

<appender name="FILE-INSERT-INFO"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
    </filter> 
     <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>DEBUG</level>
      <onMatch>DENY</onMatch>
    </filter>     
    <file>${DEV_HOME}/INFO.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/INFO.%d{yyyy-MM-dd}.%i.log.zip
                    </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>


    <root level="DEBUG">
    <appender-ref ref="FILE-INSERT-DEBUG" />
    <appender-ref ref="FILE-INSERT-INFO" />
</root>

您可以轻松地将上述配置扩展到其他级别。

关于java - logback中不同日志级别的不同日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41480031/

相关文章:

java - 在一个循环中使用 HashMap 的第一个非重复字符?

java - Java 中的 setOpaque()

java - 如何打印打乱顺序的ArrayList?

maven - 重启后 IntelliJ IDEA 中的 Spring Boot 项目停止工作

java - Logback 正在截断而不是附加到日志文件

java - Spring Boot 忽略 logback-spring.xml

java - 使用 while 循环迭代枚举

java - 创建EntityManager以及持久化

java - logback 日志未在 weblogic 12c 上打印

logging - 带通配符的 Logback 记录器名称