Logback基础
log配置文件
在springboot中,自定义logback日志的配置文件名字必须为logback.xml,放在resources根目录下,基本框架如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--添加一个日志规则-->
<appender name="" class="ch.qos.logback.core.XxxxxAppender">
<!--日志输出格式-->
<encoder>
<pattern>pattern</pattern>
</encoder>
</appender>
<!--指定具体类的日志输出,通过name进行对应-->
<logger name="" level="">
<appender-ref ref=""/>
</logger>
<!--根级别的日志输出-->
<root level="">
<appender-ref ref=""/>
</root>
</configuration>
log的优先级
在logback中常用的log级别优先级从高到低有四种:error => warn => info =>debug,这四个是项目中最常用的log级别,其中debug指出细粒度信息事件对调试应用程序是非常有帮助的;
logback日志输出格式
- %-5level:日志级别从左显示5个字符宽度
- %m:即%msg,日志的内容
- %d{}:即%date{},在{}中指出日期格式,如HH:mm:ss:SSS
- %n:表示换行
- %thread :表示当前日志的进程
- %logger{30}:表示该条日志所属类的全名
- %color():设置()中内容的颜色,常用的有:
- highlight:蓝色
- magenta:红色
- green:绿色
- cyan:青色
- boldMagenta:粗红
<property name="log.pattern_info" value="%d{HH:mm:ss:SSS} [%thread] %green(%-5level) %cyan(%-50logger{30}) : %msg%n"/>
logback的几种日志形式
在logback中有
控制台日志-ConsoleAppender
ConsoleAppender,这种形式的日志,就是在控制台打印出日志
<appender name="console_error" class="ch.qos.logback.core.ConsoleAppender">
文件日志-RollingFileAppender
RollingFileAppender,提供日志目标文件自动切换的功能。可以用日期作为日志分割的条件,RollingFileAppender有两个重要属性,RollingPolicy负责怎么切换日志,TriggeringPolicy负责何时切换;RollingPolicy中有几个不同的类来表示不同的roll策略,最常用的是TimeBasedRollingPolicy,基于时间进行滚动,如${log.path}/sys-user.%d{yyyy-MM-dd}.log,不仅指明了文件的路径和名称,同时还说明了rollingPolicy是以天数为基准进行滚动的(yyyy-MM-dd);
<!--基于时间创建日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern></fileNamePattern>
<!-- 日志最大的历史天数 -->
<maxHistory></maxHistory>
</rollingPolicy>
level过滤器
在logback中,可以使用filter标签对日志级别进行过滤,得到自己需要的日志级别;level表示指定的级别,并通过onMatch/onMismatch标签对其进行定义,onMatch表示与level匹配时,进行的操作,onMismatch表示与level不匹配时,进行的操作,ACCEPT(接收),DENY(拒绝);
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
logger和root
logger:可以用于指定具体类的日志形式,它有三个常用的属性:name,level,additivity;additivity默认为true,即向上进行转移,自己先按照自己的配置输出,再交给root进行输出;name:指定日志的使用类,通过slf4的Logger logger = LoggerFactory.getLogger(“name”)进行绑定;level:日志的输出级别,一般为info;
root相当于最高级别的logger,用于全局日志的输出,通过属性level指定日志级别;
完整的logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志存放路径 -->
<property name="log.path" value="/home/boot2/logs" />
<!--info日志输出格式-->
<property name="log.pattern_info" value="%d{HH:mm:ss:SSS} [%thread] %green(%-5level) %cyan(%-50logger{30}) : %msg%n"/>
<!--error日志输出格式-->
<property name="log.pattern_error" value="%red(%d{HH:mm:ss:SSS} [%thread] %-5level %-50logger{30} : %msg%n)"/>
<!--warn日志输出格式-->
<property name="log.pattern_warn" value="%d{HH:mm:ss:SSS} [%thread] %yellow(%-5level) %cyan(%-50logger{30}) : %msg%n"/>
<!--文件日志输出格式-->
<property name="log.pattern_file" value="%d{HH:mm:ss:SSS} [%thread] %-5level %logger{30} : %msg%n"/>
<!--控制台info日志输出-->
<appender name="console_info" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern_info}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--控制台error日志输出-->
<appender name="console_error" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern_error}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--控制台warn日志输出-->
<appender name="console_warn" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern_warn}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>WARN</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统info日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern_file}</pattern>
</encoder>
<!-- 日志级别选择,收集指定级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--记录系统error级别日志-->
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern_file}</pattern>
</encoder>
<!--日志级别选择,收集指定级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 用户访问日志输出 -->
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-user.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern_file}</pattern>
</encoder>
</appender>
<!-- logger:指定类的日志级别,通过name进行对应-->
<!--
additivity默认为true,即向上进行转移,自己先按照自己的配置输出,再交给root进行输出;
name:指定日志的使用类,通过slf4的Logger logger = LoggerFactory.getLogger("name")进行绑定;
level:日志的输出级别
-->
<logger name="testlog" level="info" additivity="false">
<appender-ref ref="console_info"/>
<appender-ref ref="console_error"/>
<appender-ref ref="console_warn"/>
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</logger>
<!--系统用户操作日志-->
<logger name="sys-user" level="info">
<appender-ref ref="sys-user"/>
</logger>
<root level="info">
<appender-ref ref="console_info"/>
<appender-ref ref="console_error"/>
<appender-ref ref="console_warn"/>
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>