日志 logback 介绍和使用

日志 logback 介绍和使用

mewl/gflpsad;bjk[pxdsf’bgmkljxckSystem.out.println() 只输出到控制台,输出没有级别,性能低下
log4J 老、性能低下,后代log4j2 其他团队 和 logback 原作者
SLF4j 日志的门面,所有的日志框架都去实现接口

学习 logback 性能强大和功能全面

基础模板
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="console" />
    </root>
</configuration>

使用 lombok 插件在需要的类添加 @Slf4jlombok 会创建全局的一个 log 日志对象

滚动日志,当日志文件过大打开会卡,

日志的输出格式

%d:指定日志输出的日期格式
%t:当前执行日志输出的线程名称
%p:日志的输出级别
%C:输出日志所在的类的完整类名
%m:日志消息
%n:换行符

输出类型

配置 logger 的根,并通过 level 指定输出的日志级别
输出级别从小到大的顺序为 trace(线性)<debug(调试)<info(消息)<warn(警告)<error(异常)
输出级别的控制 例如,如果 level 设置为 info 级别,系统中小于 info 级别的日志就不会被打印出来
trace 线性-占位符(断点)的作用,比如(=======)
debug 调试,比如输出变量信息
info 消息,比如付款成功
warn 警告,遇到了一些报错,但不会导致应用程序崩溃或无法继续工作
error 异常,比如报错

为什么需要日志级别,就像多环境开发一样,为了上线后防止输出对运维没有作用的信息

推荐配置

日志配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- configuration 是配置的根节点
     scan 当设置为true时,如果配置文件发生了改变,将会重新加载,默认值为true
     scanPeriod 设置扫描的间隔时间,默认值为1分钟
     -->
<configuration scan="true" scanPeriod="60 seconds">
    <!-- appender 指定日志输出类型,可以是控制台、文件、数据库等
         ConsoleAppender 这个类就是用于将日志输出到控制台 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder 设置输出编码以及输出格式 -->
        <encoder>
            <!-- 日志的输出格式
                 %d 指定日志输出的日期格式
                 %t 当前执行日志输出的线程名称
                 %p 日志的输出级别()
                 %C 输出日志所在的类的完整类型
                 %m 日志消息
                 %n 换行符
                 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
        </encoder>
    </appender>

    <!-- appender 指定日志输出类型,可以是控制台、文件、数据库等
         FileAppender 这个类就是用于将日志输出到日志文件 -->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!-- 日志文件的保存路径和文件名,可以是相对路径也可以是绝对路径-->
        <file>ch02/logs/service.log</file>
        <!-- append 设置为true 表示日志每次都会追加到文件的末尾,
             false 这是先清空原有日志,然后再重新输入,默认值为 true
         -->
        <append>true</append>

        <!-- encoder 设置输出编码以及输出格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
        </encoder>
    </appender>

    <!-- 配置 logger 的根,并通过 level 指定输出的日志级别
         输出级别从小到大的顺序为 trace(线性)<debug(调试)<info(消息)<warn(警告)<error(异常)
         输出级别的控制 例如,如果 level 设置为 info 级别,系统中小于 info 级别的日志就不会被打印出来
         trace 线性-占位符(断点)的作用,比如(=======)
         debug 调试,比如输出变量信息
         info 消息,比如付款成功
         warn 警告,遇到了一些报错,但不会导致应用程序崩溃或无法继续工作
         error 异常,比如报错

         为什么需要日志级别,就像多环境开发一样,为了上线后防止输出对运维没有作用的信息
     -->
    <root level="trace">
        <!-- 引用上面的输出类型,ref 引用的是 appender 的 name 属性的值
             也可以引用多个类型,这样就可以同时输出到不同的目的地
            -->
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>
滚动日志配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- configuration 是配置的根节点
     scan 当设置为true时,如果配置文件发生了改变,将会重新加载,默认值为true
     scanPeriod 设置扫描的间隔时间,默认值为1分钟
     -->
<configuration scan="true" scanPeriod="60 seconds">
    <!-- appender 指定日志输出类型,可以是控制台、文件、数据库等
         ConsoleAppender 这个类就是用于将日志输出到控制台 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder 设置输出编码以及输出格式 -->
        <encoder>
            <!-- 日志的输出格式
                 %d 指定日志输出的日期格式
                 %t 当前执行日志输出的线程名称
                 %p 日志的输出级别()
                 %C 输出日志所在的类的完整类型
                 %m 日志消息
                 %n 换行符
                 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
        </encoder>
    </appender>

    <!-- appender 指定日志输出类型,可以是控制台、文件、数据库等
         FileAppender 这个类就是用于将日志输出到日志文件
         RollingFileAppender 滚动日志,按照一定规则生成滚动日志,比如按照日期每天产生一个日志文件
          -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 配置滚动策略,TimeBasedFileNamingAndTriggeringPolicy 是比较常用的一种滚动日志规则
             用于制定日期时间的日志文件
         -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按照日期每天生成一个日志文件 -->
            <fileNamePattern>ch03/logs/%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保存归档日志的最大数量 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <!-- encoder 设置输出编码以及输出格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
        </encoder>
    </appender>

    <!-- 配置 logger 的根,并通过 level 指定输出的日志级别
         输出级别从小到大的顺序为 trace(线性)<debug(调试)<info(消息)<warn(警告)<error(异常)
         输出级别的控制 例如,如果 level 设置为 info 级别,系统中小于 info 级别的日志就不会被打印出来
         trace 线性-占位符(断点)的作用,比如(=======)
         debug 调试,比如输出变量信息
         info 消息,比如付款成功
         warn 警告,遇到了一些报错,但不会导致应用程序崩溃或无法继续工作
         error 异常,比如报错

         为什么需要日志级别,就像多环境开发一样,为了上线后防止输出对运维没有作用的信息
     -->
    <root level="trace">
        <!-- 引用上面的输出类型,ref 引用的是 appender 的 name 属性的值
             也可以引用多个类型,这样就可以同时输出到不同的目的地
            -->
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>