Logback 配置

配置文件基本结构

<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan: 扫描配置文件的改动内容
    scanPeriod: 扫描间隔时间
    debug: 输出 logback 框架自身的日志
 -->
<configuration debug="false" scan="true" scanPeriod="120 seconds">
	
	<!-- 上下文名称: 默认上下文名称为: default。使用该标签设置成其他名字,用于区分不同应用程序的记录。设置后,不能修改。 -->
    <contextName>logback-demo</contextName>
    
    <!-- 定义普通变量: 其他地方通过 ${varName} 的形式进行引用 -->
    <property name="PROJECT_NAME" value="logback-demo"/>
    <property name="LOG_HOME" value="./applogs"/>
    <property name="FILE_PATTERN"
              value="%yellow([${springProfile:-}]) %magenta([%X{TraceId}]) %magenta(%d{yyyy-MM-dd HH:mm:ss.SSS}) %yellow(%-5level) %magenta(${PID:-}) %-20(%yellow([%20.20thread])) %cyan([%-40logger{40}:%L]) -> %msg%n"/>
    <!-- 定义 Spring 变量: 依赖 Spring 框架,否则无法获取到值 -->
    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    <springProperty scope="context" name="springProfile" source="spring.profiles.active"/>

    <!-- Appender 配置 -->
    <appender name="root_appender" class="..."></appender>
    <appender name="logger_appender" class="..."></appender>

    <!-- 根节点配置 -->
    <root level="...">
        <appender-ref ref="root_appender"/>
    </root>

    <!-- Logger 配置 -->
    <logger name="pck_path" level="..." additivity="false">
        <appender-ref ref="logger_appender"/>
    </logger>
</configuration>

日志等级

定义类:ch.qos.logback.classic.Level

基本级别(从高到低):

  1. error
  2. warn
  3. info
  4. debug
  5. trace

特殊级别:

  1. all:全部级别
  2. off:关闭日志打印

Appender

定义日志输出的追加器,下面说明两个最常用的配置。

1. 控制台输出

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${FILE_PATTERN}</pattern>
        <charset>utf-8</charset>
    </encoder>
</appender>

2. 输出到日志文件,并配置滚动策略

<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 输出的日志文件路径 -->
    <file>${LOG_HOME}/${PROJECT_NAME}_info.log</file>
    <!-- 滚动策略 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <!-- 1. 文件名称格式 -->
        <fileNamePattern>${LOG_HOME}/${PROJECT_NAME}_info_%d{yyyy-MM-dd}_%i.gz</fileNamePattern>
        <!-- 2. 单个日志文件大小的最大值 -->
        <maxFileSize>200MB</maxFileSize>
        <!-- 3. 最多保几个时间周期 -->
        <maxHistory>60</maxHistory>
        <!-- 4. 所有日志文件大小的最大值 -->
        <totalSizeCap>20GB</totalSizeCap>
        <!-- 5. 启动时清除历史日志 -->
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>
    <append>true</append>
    <!-- 输出配置 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <!-- 1) 输出格式 -->
        <pattern>${PRINT_PATTERN}</pattern>
        <!-- 2) 编码格式 -->
        <charset>utf-8</charset>
    </encoder>
    <!-- 过滤配置 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <!-- 1) 拦截的等级 -->
        <level>INFO</level>
        <!-- 2) 当匹配时接受 -->
        <onMatch>ACCEPT</onMatch>
        <!-- 3) 不匹配时拒绝 -->
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

聚焦一下rollingPolicy标签:

1. 什么是时间周期

根据 fileNamePattern 属性中的 %d 的值的最小时间单位进行判定。
默认值为 yyyy-MM-dd ,即一天为一个周期。
若 %d 的值为%d{yyyy-MM-dd HH:mm:ss},则一秒为一个时间周期。

2. fileNamePattern中的 %i 是什么意思

一个时间周期内的多个日志文件,通过 %i 进行索引编号(默认从0开始)。
当一个时间周期没有结束,但是日志内容已经超出了单个日志文件大小的最大值时,会出现这种情况。

3. 日志压缩

格式有哪些(Appender 样例中使用的就是 gzip):

  1. zip
  2. gzip

注意:对日志文件进行压缩时,仅仅是对单个日志文件进行压缩。并不是对一个时间周期内的多个日志文件进行压缩,即不是以时间周期的维度进行压缩。

Root

<!-- 根节点配置: 将所有输出的日志,交给引入的 Appender 处理 -->
<root>
    <appender-ref ref="INFO"/>
</root>

Logger

<!--
    特定 logger 配置: 将特定包路径下的类产生的输出日志交给 Appender 处理。

    additivity="false" 表示不将打印内容交给 Root 节点中的 Appender 处理,避免打印内容被多次输出
-->
<logger name="com.xxx.xxx" level="info" additivity="false">
    <appender-ref ref="INFO"/>
</logger>

注意,name中的包路径不支持通配符。比如我们想设置:com.xxx.**.mapper,拦截 com.xxx 所有子包中的 mapper 包下的日志。因为不支持通配符,所以只能配置为:com.xxx 变相的进行实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值