Springboot 多环境配置 logback 以及自定义日志文件
在logback配置文件中引用springboot对应环境的变量。
一、Springboot 配置文件
- application.yml
logging:
config: classpath:logback-spring.xml
- application-dev.yml
logging:
level.root: debug
file:
path: D:/projects/demo-logback/logs
- application-prod.yml
logging:
level.root: info
file:
path: /opt/project/demo-logback/logs
二、logback 配置文件
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 获取application配置文件中的配置 -->
<springProperty scope="context" name="logLevel" source="logging.level.root"/>
<springProperty scope="context" name="logPath" source="logging.file.path"/>
<!-- 日志输出格式 -->
<property name="logPattern" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS})|%level|%thread|%c{0}[%L]|%msg%n"/>
<!--控制台日志-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
</appender>
<!--DEBUG日志-->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/debug.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!--WARN日志-->
<appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/warn.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!--INFO日志-->
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/info.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!--ERROR日志-->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!--处理成功日志-->
<appender name="push_suc" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/push_suc.log</file>
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/push_suc.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!--处理失败日志-->
<appender name="push_fail" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/push_fail.log</file>
<encoder>
<pattern>${logPattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/push_fail.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<Logger name="org.springframework" level="warn"/>
<Logger name="org.apache.http.client.protocol.ResponseProcessCookies" level="error"/>
<Logger name="org.apache" level="warn"/>
<logger name="push_suc" level="INFO" additivity="false">
<appender-ref ref="push_suc"/>
</logger>
<logger name="push_fail" level="INFO" additivity="false">
<appender-ref ref="push_fail"/>
</logger>
<root level="${logLevel}">
<appender-ref ref="debug"/>
<appender-ref ref="warn"/>
<appender-ref ref="info"/>
<appender-ref ref="error"/>
<appender-ref ref="console"/>
</root>
</configuration>
注意:
-
logback的配置文件不能用logback.xml,因为如果用logback.xml,那项目启动就会先去加载logback.xml,再去加载application.properties的了,因此这个名称得改为其他的,根据spring boot那边的命名规范,一般是-spring的,所以我这里用的是logback-spring.xml
-
在logback配置文件中用application.properties的配置,必须得通过下面这种方式才能获取到application.properties中的配置:
<springProperty scope="context" name="logLevel" source="log.level.root"/>
##日志级别的区别
-
error 级别只能获取到 error 的日志
-
warn 级别能获取到 warn 和 error 的日志
-
info 级别能获取到 info、warn、error 的日志
-
debug 级别能获取所有的日志:debug、warn、info、error
所以,日志级别 从高到底 的顺序是:
error > warn > info >debug