我想添加新的日志文件myNewLog.log,我不会在不同的环境中使用不同的记录器级别而不影响现有的日志。开发环境和生产环境的级别在下面的描述中提到:
我添加了一个新的附加程序 myNewLog,并将默认级别设置为 DEBUG,然后我创建了 3 个名为 myNewLog 的记录器,每个记录器都有不同的级别。
开发环境的logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="2 seconds">
<property resource="logback.properties" />
<appender name="apiLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APPL_FULL_PATH}/logs/mylog.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${APPL_FULL_PATH}/logs/mylog.log.%d{yyyy.MM.dd}</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
</encoder>
</appender>
<appender name="myNewLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APPL_FULL_PATH}/logs/myNewLog.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${APPL_FULL_PATH}/logs/myNewLog%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>UTF-8</charset>
<Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="apiLog" level="INFO" additivity="false">
<appender-ref ref="apiLog" />
</logger>
<logger name="myNewLog" level="DEBUG" additivity="true">
<appender-ref ref="myNewLog" />
</logger>
<logger name="myNewLog" level="INFO" additivity="false">
<appender-ref ref="myNewLog" />
</logger>
<logger name="myNewLog" level="ERROR" additivity="false">
<appender-ref ref="myNewLog" />
</logger>
<root level="ERROR">
<appender-ref ref="console" />
</root>
</configuration>
我添加了一个新的附加程序 myNewLog,并将默认级别设置为 ERROR,然后我创建了 3 个名为 myNewLog 的记录器,每个记录器都有不同的级别。
生产环境的logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="2 seconds">
<property resource="logback.properties" />
<appender name="apiLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APPL_FULL_PATH}/logs/mylog.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${APPL_FULL_PATH}/logs/mylog.log.%d{yyyy.MM.dd}</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
</encoder>
</appender>
<appender name="myNewLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APPL_FULL_PATH}/logs/myNewLog.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${APPL_FULL_PATH}/logs/myNewLog%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>UTF-8</charset>
<Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="apiLog" level="INFO" additivity="false">
<appender-ref ref="apiLog" />
</logger>
<logger name="myNewLog" level="ERROR" additivity="true">
<appender-ref ref="myNewLog" />
</logger>
<logger name="myNewLog" level="DEBUG" additivity="false">
<appender-ref ref="myNewLog" />
</logger>
<logger name="myNewLog" level="INFO" additivity="false">
<appender-ref ref="myNewLog" />
</logger>
<root level="ERROR">
<appender-ref ref="console" />
</root>
</configuration>
我的问题是:
logging:
config: classpath:logback.xml
--- #dev
spring:
profiles:
- dev
my:
log:
level: DEBUG
--- #prod
spring:
profiles:
- prod
my:
log:
level: ERROR
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="2 seconds">
<!-- import var from application.yml -->
<springProperty scope="context" name="logLevel" source="my.log.level" defaultValue="INFO"/>
<property resource="logback.properties" />
<appender name="apiLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APPL_FULL_PATH}/logs/mylog.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${APPL_FULL_PATH}/logs/mylog.log.%d{yyyy.MM.dd}</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
</encoder>
</appender>
<appender name="myNewLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APPL_FULL_PATH}/logs/myNewLog.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${APPL_FULL_PATH}/logs/myNewLog%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>UTF-8</charset>
<Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${logLevel}</level>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>${logLevel}</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="apiLog" level="INFO" additivity="true">
<appender-ref ref="apiLog" />
</logger>
<logger name="myNewLog" level="ERROR" additivity="false">
<appender-ref ref="myNewLog" />
</logger>
<logger name="myNewLog" level="DEBUG" additivity="true">
<appender-ref ref="myNewLog" />
</logger>
<logger name="myNewLog" level="INFO" additivity="true">
<appender-ref ref="myNewLog" />
</logger>
<root level="ERROR">
<appender-ref ref="console" />
</root>
</configuration>
java -jar [mvn-created-jar-file-name] --spring.profiles.active=dev
对我有用的是针对不同的环境覆盖 logkback.xml。我使用不同的虚拟机选项开始应用程序。比如说
对于开发者:
-Dlogging.config=file:my_path/dev/logback.xml
对于产品:
-Dlogging.config=file:my_path/prd/logback.xml