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

相关推荐
EumenidesJ8 天前
Java常用日志框架介绍
java·log4j·logback·slf4j
躲在没风的地方17 天前
logback日志控制服务器日志输出
java·服务器·logback
ta叫我小白22 天前
Spring Boot 设置滚动日志logback
java·spring boot·spring·logback
代码的余温25 天前
Spring Boot集成Logback日志全攻略
xml·spring boot·logback
代码的余温25 天前
Logback.xml配置详解与实战指南
xml·logback
清风920025 天前
Logback——日志技术(基础)
java·前端·logback
代码的余温1 个月前
MyBatis集成Logback日志全攻略
java·tomcat·mybatis·logback
秋千码途1 个月前
小架构step系列08:logback.xml的配置
xml·java·logback
枣伊吕波1 个月前
第十五节:第六部分:日志技术:logback的核心配置文件详解、日志级别
logback
再见晴天*_*1 个月前
logback 日志不打印
java·服务器·logback