Logback 未按预期过滤到控制台输出的日志级别

目标是:

  1. -Dlog.level=DEBUG通过 JVM args( )(默认)仅将所需的日志级别写入控制台输出INFO。(不起作用)
  2. 将 DEBUG 级别写入ROLLING_FILE_DEBUG文件附加器。(工作正常)
  3. 将 INFO 级别写入ROLLING_FILE文件附加器。(工作正常)

我想定义在控制台中应输出什么,通过使用INFO默认方式传递 JVM 参数,RollingFileAppender附加程序按预期工作。但在默认模式下运行时,我仍然会DEBUG在控制台输出中看到级别日志。我还没有传递任何 JVM 参数,只是尝试按定义默认模式<property name="LOG_LEVEL" value="${log.level:INFO}" />

logback.xml

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

    <!-- Read log level from system property, default to INFO if not provided -->
    <!-- Usage: -Dlog.level=DEBUG -->
    <property name="LOG_LEVEL" value="${log.level:INFO}" />

    <!-- Console Appender -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${LOG_LEVEL}</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Rolling File Appender INFO -->
    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!-- Log file location -->
        <file>logs/accesscontrol-logs.log</file>

        <!-- File rolling policy -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- Log file pattern (rolled files are stored with a timestamp) -->
            <fileNamePattern>logs/accesscontrol-logs-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- Keep all log files indefinitely -->
            <maxHistory>30</maxHistory>
            <!-- Do not delete old logs -->
            <!--            <cleanHistoryOnStart>false</cleanHistoryOnStart>-->

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- Log file encoding and pattern -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Rolling File Appender DEBUG -->
    <appender name="ROLLING_FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <!-- Log file location -->
        <file>logs/accesscontrol-debug-logs.log</file>

        <!-- File rolling policy -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- Log file pattern (rolled files are stored with a timestamp) -->
            <fileNamePattern>logs/astrusaccesscontrol-debug-logs-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- Keep all log files indefinitely -->
            <maxHistory>30</maxHistory>
            <!-- Do not delete old logs -->
<!--            <cleanHistoryOnStart>false</cleanHistoryOnStart>-->

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- Log file encoding and pattern -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Set log levels and appenders -->
    <root level="${LOG_LEVEL}">
        <appender-ref ref="ROLLING_FILE" />
        <appender-ref ref="ROLLING_FILE_DEBUG" />
        <appender-ref ref="CONSOLE" />
    </root>

</configuration>

我尝试使用logger但是root这种方法导致没有日志输出到控制台。

<!-- Root Logger -->
<root level="${LOG_LEVEL}">
    <appender-ref ref="ROLLING_FILE" />
    <appender-ref ref="ROLLING_FILE_DEBUG" />
</root>

<!-- Logger for Console -->
<logger name="console.logger" level="INFO" additivity="false">
    <appender-ref ref="CONSOLE" />
</logger>

要设置默认值,必须-在默认值前面添加 字符。如果要将默认值设置为INFO,则应将其设置为-INFO

<property name="LOG_LEVEL" value="${log.level:-INFO}"/>

运行命令:

默认日志级别是INFO

java -jar app.jar --logging.config=file:./logback.xml

设置日志级别为DEBUG

java -Dlog.level=DEBUG -jar app.jar --logging.config=file:./logback.xml

告诉 Spring Boot 应用程序,日志配置文件使用与 app.jar 在同一目录中指定的外部文件 logback.xml。

--logging.config=file:./logback.xml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肉三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值