最近用SpringBoot搭了一个桌面应用,配置了slf4j+logback的日志模块,这里把相关配置放出来,希望可以帮助大家更好的了解logback.xml的配置
项目结构截图:
日志文件加载方式:
logback.xml配置内容及相关注释:
注意:Filter中onMismatch这个标签的含义:
ACCEPT:大于filter对应日志级别的日志也需要打印
NEUTRAL:大于filter对应日志级别的日志交给下一个filter处理,如果当前是最后一个filter,默认打印
DENY:不打印除当前日志级别之外的其他日志。
常用日志级别:trace<debug<info<warn<error
<?xml version="1.0" encoding="UTF-8"?>
<!--开启动态刷新,刷新间隔300s,有变动不会触发日志-->
<configuration scan="true" scanPeriod="300 seconds" debug="false">
<!--定义日志存储路径 logs文件夹-->
<property name="LOG_HOME" value="logs"/>
<property name="ERR_NAME" value="alarm"/>
<property name="LOG_NAME" value="log"/>
<!-- 控制台日志输出格式 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 采用PatternLayoutEncoder编码 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 日志输出格式,当前时间+线程+日志级别+日志打印所在的class -->
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
<!-- 采用UTF-8字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 定义error日志文件输出格式 -->
<appender name="PlatPixvisErrorLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 定义error日志文件输出目录及文件名 logs/error文件夹下 项目名-error-日期-log -->
<fileNamePattern>${LOG_HOME}/error/demo-error-%d{yyyy-MM-dd
}-%i.log
</fileNamePattern>
<!-- 定义最大保留天数 -->
<maxHistory>200</maxHistory>
<!-- 定义单个文件大小 -->
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
<encoder>
<!-- 定义文件内日志输出格式 -->
<pattern>%d{MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
</pattern>
<!-- 定义文件内日志字符集 -->
<charset>UTF-8</charset>
</encoder>
<!-- 日志级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 打印ERROR级别日志 onMatch:ACCEPT代表打印当前级别的日志。onMismatch:DENY代表不打印级别大于当前级别的日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 定义Info日志文件输出格式 -->
<appender name="PlatPixvisInfoLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/info/plat-pixvis-debug-%d{yyyy-MM-dd
}-%i.log
</fileNamePattern>
<maxHistory>200</maxHistory>
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 打印DEBUG级别的日志,大于debug级别的日志交给下个Filter处理-->
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 打印INFO级别的日志,大于Info级别的日志交给下个Filter处理-->
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 打印WARN级别的日志,大于WARN级别的日志不打印 -->
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志只对name这个包下的类有用,根据传入的level去匹配对应的日志文件 -->
<logger name="com.example.plat" level="${log.level}" addtivity="true">
<!-- 与appender绑定 -->
<appender-ref ref="Console"/>
<appender-ref ref="PlatPixvisInfoLog"/>
<appender-ref ref="PlatPixvisErrorLog"/>
</logger>
</configuration>