快乐随行

导航

Spring Boot2 开启系统日志(3)- 在Logback中配置日志

Logback的配置文件通常命名为logback.xml,它控制了日志记录方式、级别和输出目标。在Spring Boot项目中,可以将logback.xml文件放置在src/main/resources目录下。

1. Logback 配置文件的基本结构

<?xml version="1.0" encoding="UTF-8"?>
<configuration>  
    <property />     
    <contextName> </contextName>    
    <appender> </appender>       
    <logger> </logger>    
    <root> </root>  
</configuration>

2. Logback 配置文件标签含义

2.1. configuration 根节点

包含以下属性:

  • scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
  • scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟
  • debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
<configuration scan="true" scanPeriod="60 seconds" debug="false">  
    <!-- 其他配置省略-->  
</configuration>

2.2. property

设置一个变量。属性有name和value,name变量的名称,value变量的值。定义变量之后,后面配置中可以使用${变量name}来获取。

2.3. contextName

标识一个上下文名称,默认为default,一般用不到

2.4. appender

格式化日志输出,可以配置为文件、数据库、邮件等不同的输出目标。有两个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。
这个节点很重要,通常的日志文件需要定义三个appender,分别是控制台输出,常规日志文件输出,异常日志文件输出。
appender有四种类型:

  • ConsoleAppender(控制台日志)
  • FileAppender(文件日志): 将日志写入一个指定的文件中,当文件达到一定大小或时间点时,它会被新的日志文件所替代。需要指定日志文件的最大大小和文件数量等参数。
  • RollingFileAppender(滚动文件日志): 在日志文件达到指定大小时,创建新的日志文件继续写入,新创建的日志文件的名称会加上一个时间戳或索引号,以便区分。需要指定日志文件的最大大小和保留数量,当超过这个数量时,最早创建的日志文件会被自动删除。还可以生成一个索引文件,用于记录所有滚动日志文件的名称和位置信息。这样可以在需要查看历史日志时,快速定位到需要的日志文件。
  • AsyncAppender(异步日志):通过线程池异步处理写入磁盘的日志。异步输出的原理是:先写入到缓冲区,当缓冲区满了或者达到一定时间,再把缓冲区的数据一次性写入磁盘,这样可以减少磁盘IO操作,提高性能。

appender内的有一个子标签encoder,有两个作用,一是把日志信息转换成字节数组,二是把字节数组写入到输出流,可以用于定义输出日志内容的编码格式、日志格式;其中endcoder内的子标签charset用于定义输出日志内容的编码格式,子标签pattern用于定义输出日志的具体格式;

  • %date:表示日期
  • %thread:表示线程名
  • %-5level:表示级别从左显示 5 个字符宽度
  • %logger{36}:表示 Logger 名字最长 36 个字符
  • %msg:表示日志消息
  • %n:换行符
  • %line:表示当前日志事件的行号
 <!-- 控制台的标准输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

2.5. logger

可选节点,用来指明具体的包或类的日志输出级别,它将会覆盖root的输出级别。 该节点有几个重要的属性如下:

  • name:必写属性,指定具体包或类,被指定的包或类中的日志输出将遵从该logger规定配置;
  • level:可选,指定日志输出级别,该级别将覆盖root配置的输出级别;
  • addtivity:可选,默认为true,将此logger的信息向上级传递,将有root节点定义日志打印。如果设置为false,将不会上传,此时需要定义一个appender-ref 节点才会输出。
  • appender-ref:引用的appender,引用后将实现appender中定义的行为。一个logger可以有多个引用,互不影响。

2.6. root

这是一个必须节点,用来指定基础的日志级别,只有一个level属性,默认值是DEBUG。

3. Logback 配置实例

以下是一个基本的logback.xml配置示例:

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

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 设置根日志级别为INFO,继承给所有logger -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>

</configuration>
  • appender: 定义使用控制台输出。
  • encoder: 定义了日志的输出格式,上述示例显示了时间戳、线程、日志级别、Logger名称和消息。
  • root: 定义了日志级别是INFO,表示只记录INFO级别及以上的日志消息。

pattern 配置的编码中,对应符号的含义如下

  • %d{HH:mm:ss.SSS}——日志输出时间
  • %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
  • %-5level——日志级别,并且使用5个字符靠左对齐
  • %logger ——日志输出者的名字
  • %msg——日志消息
  • %n——平台的换行符

配置日志级别
Logback允许您为不同的Logger定义不同的日志级别。例如,如果您想记录某个包下的日志级别为DEBUG级别及以上的日志消息,可以采用以下方式配置:

<logger name="com.example.myapp" level="DEBUG" />

posted on 2023-12-05 16:20  快乐随行  阅读(70)  评论(0编辑  收藏  举报