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

相关推荐
m0_748247555 小时前
springboot中配置logback-spring.xml
spring boot·spring·logback
m0_748250035 小时前
springboot使用logback自定义日志
java·spring boot·logback
程序猿熊跃晖5 小时前
多环境日志管理:使用Logback与Logstash集成实现高效日志处理
spring boot·elk·logback
CodeMonkey陈3 天前
springboot2.0整合logback日志(保姆级详细教程)
spring boot·后端·logback
m0_748233883 天前
使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
xml·spring·logback
山海不说话4 天前
从零搭建微服务项目Base(第5章——SpringBoot项目LogBack日志配置+Feign使用)
spring boot·后端·spring·spring cloud·微服务·logback
wangbing112512 天前
开发指南098-logback-spring.xml说明
xml·spring·logback
归宿乐瑶12 天前
六.logback记录日志文件并按大小日期分割文件
java·spring boot·logback
小池先生12 天前
mybatisplus把sql日志打印到logback日志文件中
sql·mybatis·logback
Mr_sun.1 个月前
Logback日志文件详细配置
java·spring boot·logback