上一篇大概总揽了Logback,这一篇集中精力看xml配置文件。以下是一个涵盖大部分常用配置项的典型xml文件,每一项功能以注释方式标出,比较直观。文件名是logback-spring.xml,放在Spring Boot的resources目录下。
<?xml version="1.0" encoding="UTF-8"?>
<!--scan默认true,当xml发生改变,会被自动重新加载;debug默认false,为true将打印出日志的日志-->
<configuration scan="false" scanPeriod="60 seconds" debug="false">
<!-- 变量名和变量值,可以通过${变量名}引用-->
<property name="APP_NAME" value="blog" />
<property name="LOG_HOME" value="./logs" />
<!-- 指定日志输出的目的地,这个appender把日志输出到控制台-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 对日志进行格式化-->
<encoder>
<!-- %d表日期,%thread表线程名,%-5level表级别(从左显示5个字符宽度)
%logger输出日志的class类名,{25}最长25个字符
%line行号,%msg日志内容,%n换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{25}:%line %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 这个appender的目的地是滚动记录文件-->
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 滚动策略,TimeBasedRollingPolicy是最常用的滚动策略,根据时间来制定策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 被写入的文件名,本项目是project根目录下logs/blog-xxx.log -->
<fileNamePattern>${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保留log文件的最大数量,超过就删除旧文件,以下是保留7个月-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{25}:%line %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 这个appender是异步输出日志文件-->
<appender name="asyncFile" class="ch.qos.logback.classic.AsyncAppender">
<!-- 队列剩余容量为20%时,不丢弃低级别如INFO, DEBUG, TRACE事件。默认-1 -->
<discardingThreshold>0</discardingThreshold>
<!-- 队列深度,默认256-->
<queueSize>2048</queueSize>
<!-- 提取调用者信息数据,如代码行号。对性能有少许影响,默认false-->
<includeCallerData>true</includeCallerData>
<!-- 对应名字为rollingFile的appender,将其异步输出-->
<appender-ref ref="rollingFile" />
</appender>
<!-- 某一个包或某一个类的日志打印级别-->
<logger name="org.springframework" level="WARN"/>
<logger name="org.hibernate.SQL" level="WARN"/>
<!-- 使用spring扩展profile支持,此配置文件要以logback-spring.xml命名 -->
<!-- 开发环境下的日志配置-->
<springProfile name="dev">
<!-- 根logger,指定日志级别,采用哪个appender,可以采用多个appender-->
<root level="info">
<appender-ref ref="stdout" />
<!-- <appender-ref ref="rollingFile" /> -->
</root>
</springProfile>
<!-- h2环境下的日志配置-->
<springProfile name="h2">
<root level="info">
<appender-ref ref="stdout" />
</root>
</springProfile>
<!-- docker环境下的日志配置-->
<springProfile name="docker">
<root level="info">
<appender-ref ref="asyncFile" />
</root>
</springProfile>
</configuration>