首页 > 解决方案 > logback 无法登录调试

问题描述

我的 logback 配置有点问题,我的应用程序的所有 --> log.debug("one log") 都没有写入我的 debug.log 文件......你知道为什么吗?在我的 logback 配置文件下面:

<?xml version="1.0" encoding="UTF-8"?>
<property name="LOG_PATH" value="/home/log/company"/>

<appender name="trafic" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/trafic.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>

    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]|%-5level|%thread|%logger.%method%cyan(\(%line\)): --- %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <maxHistory>30</maxHistory>
        <totalSizeCap>50MB</totalSizeCap>
        <cleanHistoryOnStart>false</cleanHistoryOnStart>
        <fileNamePattern>${LOG_PATH}/trafic/year=%d{yyyy, aux}/month=%d{MM, aux}/day=%d{dd,
            aux}/trafic.%d{yyyy-MM-dd}.log
        </fileNamePattern>
    </rollingPolicy>
</appender>


<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/debug.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
    </filter>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]|%-5level|%thread|%logger.%method%cyan(\(%line\)): --- %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <maxHistory>30</maxHistory>
        <totalSizeCap>50MB</totalSizeCap>
        <cleanHistoryOnStart>false</cleanHistoryOnStart>
        <fileNamePattern>${LOG_PATH}/debug/year=%d{yyyy, aux}/month=%d{MM, aux}/day=%d{dd,
            aux}/debug.%d{yyyy-MM-dd}.log
        </fileNamePattern>
    </rollingPolicy>
</appender>


<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/error.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
    </filter>

    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]|%-5level|%thread|%logger.%method%cyan(\(%line\)): --- %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <maxHistory>30</maxHistory>
        <totalSizeCap>50MB</totalSizeCap>
        <cleanHistoryOnStart>false</cleanHistoryOnStart>
        <fileNamePattern>${LOG_PATH}/error/year=%d{yyyy, aux}/month=%d{MM, aux}/day=%d{dd,
            aux}/error.%d{yyyy-MM-dd}.log
        </fileNamePattern>
    </rollingPolicy>
</appender>

<appender name="access" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/access.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]|%-5level|%thread|%logger.%method%cyan(\(%line\)): --- %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <maxHistory>30</maxHistory>
        <totalSizeCap>50MB</totalSizeCap>
        <cleanHistoryOnStart>false</cleanHistoryOnStart>
        <fileNamePattern>${LOG_PATH}/access/year=%d{yyyy, aux}/month=%d{MM, aux}/day=%d{dd,
            aux}/access.%d{yyyy-MM-dd}.log
        </fileNamePattern>
    </rollingPolicy>
</appender>

<logger name="fr.company" level="ERROR" additivity="false">
    <appender-ref ref="error"/>
</logger>

<logger name="fr.company" level="WARN" additivity="false">
    <appender-ref ref="error"/>
</logger>

<logger name="fr.company" level="DEBUG" additivity="false">
    <appender-ref ref="debug"/>
</logger>

<logger name="fr.company" level="INFO" additivity="false">
    <appender-ref ref="trafic"/>
</logger>

<logger name="org.apache.activemq" level="WARN" additivity="false">
    <appender-ref ref="error"/>
</logger>

<logger name="org.springframework" level="INFO" additivity="false">
    <appender-ref ref="access"/>
    <appender-ref ref="trafic"/>
</logger>

<logger name="springfox.documentation" level="WARN" additivity="false">
    <appender-ref ref="error"/>
</logger>

<logger name="org.hibernate" level="WARN" additivity="false">
    <appender-ref ref="error"/>
</logger>

<logger name="com.zaxxer" level="WARN" additivity="false">
    <appender-ref ref="error"/>
</logger>

<root>
    <appender-ref ref="trafic"/>
    <appender-ref ref="access"/>
    <appender-ref ref="debug"/>
    <appender-ref ref="error"/>
</root>

还有我的依赖:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>

以及记录器声明/使用:

    @Slf4j
    @Service
    public class EventProcessor {

public EventProcessor() {
        log.info("Event initialized with '{}' uuid received", getEventUuid());
        log.debug("Event initialized with '{}' uuid received", getEventUuid());
                }

您知道为什么,INFO 行正确写入 debug.log 而不是 DEBUG 行吗?...

非常感谢您

标签: javalogbackslf4j

解决方案


<logger name="fr.company" level="ERROR" additivity="false">
    <appender-ref ref="error"/>
</logger>

<logger name="fr.company" level="WARN" additivity="false">
    <appender-ref ref="error"/>
</logger>

<logger name="fr.company" level="DEBUG" additivity="false">
    <appender-ref ref="debug"/>
</logger>

<logger name="fr.company" level="INFO" additivity="false">
    <appender-ref ref="trafic"/>
</logger>

您正在配置同一个记录器四次。只有最后一个配置有效(将日志级别设置为 INFO)。

您似乎想要的是在 DEBUG 处拥有记录器,将所有附加程序添加到其中,然后在附加程序中再次过滤以控制输出(您已经在这样做)。

<logger name="fr.company" level="DEBUG" additivity="false">
    <appender-ref ref="error"/>
    <appender-ref ref="debug"/>
    <appender-ref ref="trafic"/>
</logger>

推荐阅读