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

相关推荐
豢龙先生12 天前
Logback官方文档翻译章节目录
logback
中国lanwp23 天前
springboot logback 默认加载配置文件顺序
java·spring boot·logback
Minyy1124 天前
SpringBoot程序的创建以及特点,配置文件,LogBack记录日志,配置过滤器、拦截器、全局异常
xml·java·spring boot·后端·spring·mybatis·logback
魔道不误砍柴功1 个月前
Spring Boot日志系统详解:Logback与SLF4J的默认集成
spring boot·后端·logback
神州永泰1 个月前
Java logback框架日志输出中文乱码的解决方案(windows)
java·windows·logback
遥不可及~~斌1 个月前
Spring Boot 项目日志系统全攻略:Logback、Log4j2、Log4j与SLF4J整合指南
spring boot·log4j·logback
IT瘾君1 个月前
Java基础:Logback日志框架
java·开发语言·logback
wisdom_zhe2 个月前
Spring Boot 日志 配置 SLF4J 和 Logback
java·spring boot·logback
我命由我123452 个月前
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
java·开发语言·jvm·spring boot·spring·java-ee·logback
字节王德发2 个月前
什么是logback FixedWindowRollingPolicy的文件滚动策略?
java·数据库·logback