目标是:
-Dlog.level=DEBUG
通过 JVM args( )(默认)仅将所需的日志级别写入控制台输出INFO
。(不起作用)- 将 DEBUG 级别写入
ROLLING_FILE_DEBUG
文件附加器。(工作正常) - 将 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