logback日志框架使用

依赖引入

XML 复制代码
<dependency>
   <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>

使用logback日志框架只需要引入以上即可,(我们平时使用较多的@Slf4j注解是另外的机制触发)后续会谈到

查看以上的maven依赖项引入如下:

该依赖项引入了:

slf4j-api

logback-core

logback-classic

配置项样列

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <property name="LOG_HOME" value="./logs"/>

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}: - %m%n</pattern>
<!--            <pattern>${COLOR_PATTERN}</pattern>-->
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="LOGFILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/performance-batch.%d{yyyy-MM-dd}.log
            </FileNamePattern>

            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}: - %msg%n</pattern>

        </encoder>
    </appender>

    <!--此日志文件只包含错误日志-->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/performance-batch-error.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{3}: - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录error级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>



    <appender name="LOGFILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="LOGFILE"/>
    </appender>

    <appender name="LOG_ERROR_FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="ERROR"/>
    </appender>

    <logger name="HuaweiCloud-SDK-Access" level="OFF"/>

    <!-- 日志输出级别 -->
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOGFILE_ASYNC"/>
        <appender-ref ref="LOG_ERROR_FILE_ASYNC"/>
    </root>

</configuration>

常用占位符含义

%C = %class【等价】打印全类名 ---不推荐,耗性能

%d = %date【等价】 日期格式可以在后面用{}表示

%F = %file 【等价】 发出日志请求的java源文件名字 ---不推荐,耗性能

%L = %line 【等价】 java文件中请求的行号 ---不推荐,耗性能

%m = %msg = %message 日志正文信息

%M = %method 日志请求发出的方法的方法名----不推荐,耗性能

%n 换行符

%p = %le = %level【等价】 日志级别 %-5p 表示打印日志级别,且左对齐5个字符的距离

%t = %thread 线程名称

%i 文件序号,在单条日志中不支持,在文件名称处支持

源码浅析

从结构上看,logback的配置解析是从<configuration debug="false">标签开始的,从代码上看入口是:

org.slf4j.impl.StaticLoggerBinder的静态代码块开始的。

从代码上看logback配置文件的优先级如下:

最终会把xml配置内容解析成一个LoggerContext对象,其中的结构关系如下:

每个Logger包含的元素有:名称、日志级别、生效的日志级别、父Logger、子logger列表、一组Appender列表...

未在xml中明确定义的logger的日志输出相关的所有限制继承父类,所有logger的父类是Root

相关推荐
quokka5615 小时前
Springboot 整合 logback 日志框架
java·spring boot·logback
高高要努力8 天前
SpringBoot日志集成-LogBack
spring boot·后端·logback
汪小哥10 天前
浅谈spring 后端项目配置logback日志
java·spring·logback
coldstarry11 天前
sheng的学习笔记-logback
spring cloud·logback
Flying_Fish_roe12 天前
Logback日志上下文
网络协议·rpc·logback
Flying_Fish_roe12 天前
Logback 与 Log4j 2 的对比
单元测试·log4j·logback
左直拳22 天前
设置spring boot禁止日志输出到控制台
spring boot·后端·乱码·logback·slf4j·输出到控制台
I like Code?1 个月前
SpringBoot日志使用:Slf4j与Logback
java·spring boot·logback
洛小豆1 个月前
SpringBoot日志管理 —— 解决Logback生成 “LOG_PATH_IS_UNDEFINED“ 文件夹问题
java·spring boot·后端·spring·logback
大骨熬汤1 个月前
在Logback中配置`requestId`进行日志追踪的实践与应用
logback