logback详解

logback详解



笔记插图(第 1 页)

笔记插图(第 1 页)

笔记插图(第 2 页)

<?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>