Logback简介及配置文件logback.xml详解

共 9216字,需浏览 19分钟

 ·

2021-04-06 19:20

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

  作者 |  ergwang

来源 |  urlify.cn/f2I7ja

logback简介

Logback是由log4j创始人设计的另一个开源日志组件,官方网站:http://logback.qos.ch。

  1. logback的结构:主要由三个模块组成:
    • logback-core // 基础模块,其他模块基于此

    • logback-classic // 它是log4j的一个改良版本,同时它完整实现了slf4j API,可以更换成其它日志系统,如log4j

    • logback-access // 访问模块与Servlet容器集成提供通过Http来访问日志的功能

  2. 用它取代log4j的理由在于以下优势:

    做到了更快的实现、非常充分的测试、很自然地实现了SLF4、非常详尽的官方文档、自动重新加载配置文件、Lilith是log事件的观察者,和log4j的chainsaw类似、谨慎的模式和非常友好的恢复(可以实现多个线程同时写一个日志文件)、配置文件可以处理不同的情况、Filters(过滤器)、SiftingAppender、自动压缩已经打出来的log文件、堆栈树带有包版本、自动去除旧的日志文件等。

logback.xml配置文件详解

  1. 配置文件示例

    <?xml version="1.0" encoding="UTF-8"?>

    <!-- 配置文件修改时重新加载,默认true -->
    <configuration scan="true">
        
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="CATALINA_BASE" value="**/logs"></property>
        
        <!-- 控制台输出 -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder charset="UTF-8">
                <!-- 输出日志记录格式 -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
     
        <!-- 第一个文件输出,每天产生一个文件 -->
        <appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 输出文件路径+文件名 -->
                <fileNamePattern>${CATALINA_BASE}/aa.%d{yyyyMMdd}.log</fileNamePattern>
                <!-- 保存30天的日志 -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder charset="UTF-8">
                <!-- 输出日志记录格式 -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
     
        <!-- 第二个文件输出,每天产生一个文件 -->
        <appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${CATALINA_BASE}/bb.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${CATALINA_BASE}/bb.%d{yyyyMMdd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder charset="UTF-8">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
        
        <appender name="CUSTOM" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${CATALINA_BASE}/custom.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- daily rollover -->
                <fileNamePattern>${CATALINA_BASE}/custom.%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- keep 30 days' worth of history -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder charset="UTF-8">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
        
        <!-- 设置日志输出级别 -->
        <root level="ERROR">
            <appender-ref ref="CONSOLE" />
        </root>
        <logger name="file1" level="DEBUG">
            <appender-ref ref="FILE1" />
        </logger>
        <logger name="file1" level="INFO">
            <appender-ref ref="FILE2" />
        </logger>
        <!-- 自定义logger -->
        <logger name="custom" level="INFO">
            <appender-ref ref="CUSTOM" />
        </logger>
    </configuration>
  2. 配置文件说明

    一个元素

    0或多个

    0或多个

  1. logback配置文件加载说明

    logback在启动时:

    1. 在 classpath 中寻找 logback-test.xml文件

    2. 如果找不到 logback-test.xml,则在 classpath 中寻找 logback.groovy 文件

    3. 如果找不到 logback.groovy,则在 classpath 中寻找 logback.xml文件

    4. 如果上述的文件都找不到,则 logback 会使用 JDK 的 SPI 机制查找 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置实现类,这个实现类必须实现 Configuration 接口,使用它的实现来进行配置

    5. 如果上述操作都不成功,logback 就会使用它自带的 BasicConfigurator 来配置,并将日志输出到 console

  2. 打印级别

    TRACE<DEBUG<INFO<WARN<ERROR,默认DEBUG

logback快速上手

  1. 依赖的jar包:

    slf4j-api

    logback-core

    logback-classic


       <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-api</artifactId>
           <version>1.7.5</version>
       </dependency>
       <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-core</artifactId>
           <version>1.0.11</version>
       </dependency>
       <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-classic</artifactId>
           <version>1.0.11</version>
       </dependency>
    【注】其中slf4j-api不是logback的一部分,是另一个项目,通常结合使用
  2. 代码示例(两种):

    // 第一种,直接声明一个对象
    public class Slf4JLoggerTest1 {
        private static final Logger logger = LoggerFactory.getLogger(SimpleDemo.class);
        public static void main(String[] args) {
            logger.info("Hello,tese1, this is a line of log message logged by Logback");
        }
    }


    // 第二种,在类的配置上添加@slf4j注解(**借助lombok实现,原理同第一种**)
    @Slf4j
    public class Slf4JLoggerTest2 {
        public static void main(String[] args) {
            log.info("Hello,tese2, this is a line of log message logged by Logback");
        }
    }

参考资料:

[1] logback配置详解https://segmentfault.com/a/1190000008315137

[2] logback的使用和logback.xml详解https://www.cnblogs.com/warking/p/5710303.html




粉丝福利:Java从入门到入土学习路线图

👇👇👇

👆长按上方微信二维码 2 秒


感谢点赞支持下哈 


浏览 42
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报