
logback详解



<?xml version="1.0" encoding="UTF-8"?>
<!-- scan="true" 开启自动扫描 日志文件 scanPeriod="60 seconds" 监测配置文件是否有修改
的时间间隔–>
<!-- debug="false" 当此属性设置为true时,将打印出logback内部日志信息,实时查看
logback运行状态。默认值为false。–>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 每个logger都关联到logger上下文,默认上下文名称为“default”。
用于区分不同应用程序(项目)的记录。一旦设置,不能修改,可以通过%contextName
来打印日志上下文名称,一般来说我们不用这个属性,可有可无 –>
<contextName>spring-study</contextName>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 标识此<timestamp> 的名字;datePattern:设置将当前时间(解析配置文件的时间)
转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式 –>
<!-- <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> -->
<!--日志格式和颜色渲染 -->
<conversionRule conversionWord="clr"
converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyCo
nverter" />
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowable
ProxyConverter" />
<!-- property 自定义变量 -->
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p})
%clr(${PID:- }){magenta} %clr(—){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39})
{cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{yyyy-MM-
dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } — [%t] %-40.40logger{39} :
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="LOG_FILE" value="./logs/"/>
<property name="LOG_FILE_NAME" value="spring-study"/>
<!-- appender 主要作用就是:控制打印日志的地方、打印日志的输出格式。
name 为这个appender起一个唯一标识的名称。与appender-ref中的值相对应。以引用
appende
有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文
件输出策略。
appender标签中可以包含0个或者1个【layout】标签。0个或者多个【encoder】标签,
0个或者多个 【filter】标签–>
<appender name="rizhiwenjian"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}/${LOG_FILE_NAME}.log</file>
<!--<encoder>表示对日志进行编码:
必须以【%】开头。(必须的)
【%】后面是一个格式修饰符:用于左对齐,右对齐,前或后截取等等。(可选
的)
转换的关键字。(必须的)。用于控制转换成什么的数据字段。例如logger的
name、level级别、日期、线程的名称等等。
在大括号【{}】中间的范围。(可选的)
在patternLayout中可以使用小括号【()】形成一组转换模式。如果想要【()】作为普
通字符,就要转义。
默认情况下是【右对齐】,如果想要【左对齐】,就是用减号【-】。然后就是一个
十进制的【最小宽度】数字。
如果数据内容小于最小宽度的数字,如果没有【-】就在前面填充空格,如果有
【-】就在后面填充空格。直到到达最小宽度的值。
如果数据内容超过最小宽度,会显示全部内容(在没有执行最大宽度的时
候)。
指定最大宽度:使用点号【.】,后面加上一个十进制的数字。如果数据内容超过了
【最大宽度】,默认情况下,会从【前面】截取数据。
如果数据长度为10,最大宽度为8,就会去掉前面2个字符,以显示后面的8个
字符数据。如果想从【后面截取】,就在【.】后面加上一个【-】,就会从后面截取。即
【.-8】
【直接写数字】:标识最小宽度并且是右对齐 %20logger
【-数字】:标识最小宽度,并且是左对齐 %-20.20logger
【.数字】:标识最大宽度。如果数据内容超过最大宽度,从前面截取数据
%10.10logger
【.-数字】:标识最大宽度。如果数据内容超过最大宽度,从后面截取数据
%10.-10logger
%d{yyyy-MM-dd HH:mm:ss, SSS} 日志生产时间,输出到毫秒的时间
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%c logger的名称(%logger)
%logger 日志输出者的名字
%t 输出当前线程名称(%thread)
%p 日志输出格式
%m 日志内容,即 logger.info(“message”)
%msg 日志文本
%n 换行符
%C Java类名(%F)
%L 行号
%M 方法名
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数
%F 输出所在的类文件名,如Log4j2Test.java
hostName 本地机器名
hostAddress 本地ip地址
–>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}/%d{yyyy-MM-dd}/${LOG_FILE_NAME}.%d{yyyy-
MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<!--日志文件的最大大小-->
<MaxFileSize>100MB</MaxFileSize>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="kongzhitai" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- <charset>UTF-8</charset>-->
</encoder>
<!-- filter 如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为
Error 的级别高,所以我们使用下面的策略,可以避免输出 Error 的日志
<filter class="ch.qos.logback.classic.filter.LevelFilter">
拦截 Error
<level>ERROR</level>
匹配到就禁止
<onMatch>DENY</onMatch>
没有匹配到就允许
<onMismatch>ACCEPT</onMismatch>
</filter>
–>
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的
日志 –>
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>256</queueSize>
</appender>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定
<appender>。
1)root标签是所有logger的祖先元素,所有的logger都继承与root元素,相当于java中的
object对象。
2)每一个logger标签都可以指定一个级别(TRACE,DEBUG,INFO,WARN,
ERROR五种,他们是在ch.qos.logback.classic.Levelclass中定义的)。
3)如果一个指定的logger标签没有指定规则的话,就会继承离他最近的祖先的级别。
4)因为所有的logger都是继承root标签,所以为了确保所有的logger都有一个级别,
root标签有一个默认的级别,默认值为DEBUG
<logger>有一个name属性,一个可选的level、一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。主要是指定包名或者
类名的全路径(包含包名)
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL
和 OFF,
还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
level默认是以覆盖的方式继承的。而appender-ref是附加的形式继承的。
覆盖方式:如果父亲的级别是DEBUG,如果在这个logger中设置了INFO,最终这
个logger的级别就是INFO
附加方式:如果在父亲中有一个appender-ref(关联一个appender标签),在当前这个
logger中也设置一个appender-ref,
那么当前的logger就有两个appender-ref的关联。如果想要改变默认的附加形式,那
就要使用addtivity属性值。
logger标签可以包含0个或者多个appender-ref标签,所以每一个appender标签都可以关
联到指定的logger中。
<logger name="org.springframework.web" level="info"/>
<logger
name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcess
or" level=“INFO”/>
————————————————————————————————————————
————————————————————————————————————————
——————————————————————————————————————
使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要
查看sql语句的话,有以下两种操作:
第一种把<root level=“info”>改成<root level=“DEBUG”>这样就会打印sql,不过这样
日志那边会出现很多其他消息
第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打
印,其他还是正常info级别:
【logging.level.org.mybatis=debug logging.level.dao=debug】
–>
<logger level="INFO" name="com.dym.springstudy">
<appender-ref ref="rizhiwenjian" />
</logger>
<logger level="WARN" name="org.springframework">
<appender-ref ref="rizhiwenjian" />
</logger>
<!-- root 节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关
可以包含零个或多个元素,标识这个appender-ref 将会添加到这个loger–>
<root level="info">
<appender-ref ref="kongzhitai" />
</root>
</configuration>