文章目录
问题描述
在做的项目中,仅仅使用了info级别日志输出,日志的输出文件也都是info、warn、error前缀开头,单独功能日志记录混杂。
使用xml进行日志的配置
我配置的日志共分为以下节点:
configuration 为根节点,下面子节点包括:property、appender、logger、root
头部约束:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configuration debug="false"
xmlns="http://ch.qos.logback/xml/ns/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://raw.githubusercontent.com/enricopulatzo/logback-
XSD/master/src/main/xsd/logback.xsd">
配置常用的property
注意 日志打印的格式不能用property代替,必须写到单独的appender中,否则,打印的时间永远是项目启动的时间。
<property name="PROJECT" value="springboot" />
<property name="ROOT" value="../appLogs/${PROJECT}/" />
<property name="FILESIZE" value="50MB" />
<property name="MAXHISTORY" value="100" />
配置appender
用到的两个appender类:
1.ch.qos.logback.core.ConsoleAppender
2.ch.qos.logback.core.rolling.RollingFileAppender
<!-- 控制台打印 -->
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="utf-8">
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %logger{36}.%M - %m%n
</pattern>
</encoder>
</appender>
<!-- ERROR 输入到文件,按日期和文件大小 -->
<appender name="ERROR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder charset="utf-8">
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %logger{36} - %m%n
</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${ROOT}%d/error.%i.log</fileNamePattern>
<maxHistory>${MAXHISTORY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${FILESIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
对单独的logger进行自定义
<logger name="org.apache.ibatis" level="INFO" additivity="false" />
<logger name="org.mybatis.spring" level="INFO"
additivity="false" />
<logger name="org.springframework" level="OFF">
</logger>
其中additivity是否继承level级别相关,如果为true,对应级别的level中也会记录该logger打印的日志
设置根路径级别
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="DEBUG" />
<appender-ref ref="ERROR" />
<appender-ref ref="WARN" />
<appender-ref ref="INFO" />
</root>
配置单独的日志输出通道
配置一个appender
<appender name="test"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder charset="utf-8">
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %logger{36}.%M.%L - %m%n
</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${ROOT}%d/test.%i.log</fileNamePattern>
<maxHistory>${MAXHISTORY}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${FILESIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
指定个logger
<!-- 单独文件的日志输出 -->
<logger name="xx" level="info" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="test" />
</logger>
参数相关
参数名 | 功能 |
---|---|
${xx} | 从property的name为xx取值,也可以去环境变量中的值 |
[%-5level] | 日志级别 |
%d | 打印的日志中时间格式,可以自定义格式化字符串,和simpleDateFormat中一致 |
%logger{36} | logger名 |
%M | 日志打印点的方法名 |
%L | 日志打印点的行号 |
%m%n |
测试
控制台打印:
文件日志记录:
springboot中的配置
#日志隔离级别
logging:
level:
root: warn
com.xxx: debug
config: classpath:logback.xml
至此,使用logback配置单独的日志输出通道完成。