logback配置文件详解
logback介绍和配置详解
logback是Java的开源框架,性能比log4j要好。是springboot自带的日志框架。该框架主要有3个模块:
logback-core:核心代码块(不介绍)
log back-classic:实现了slf4j的api,加入该依赖可以实现log4j的api。
log back-access:访问模块与servlet容器集成提供通过http来访问日志的功能(也就是说不需要访问服务器,直接在网页上就可以访问日志文件)。
一、logback的使用
引入maven依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
logback.xml格式详解
configuration
根节点<configuration>,包含下面三个属性:
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--其他配置省略-->
</configuration>
子节点contextName
用来设置上下文名称
Property
子节点<property> :用来定义变量值,它有两个属性name和value,通过<property>定义的值会被插入到logger上下文中,可以使“${}”来使用变量。
name: 变量的名称
value: 的值时变量定义的值
timestamp
子节点<timestamp>:获取时间戳字符串,他有两个属性key和datePattern
key: 标识此<timestamp> 的名字;
datePattern: 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。
appender
子节点<appender>:负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名
appender class 类型主要有三种:ConsoleAppender、FileAppender、RollingFileAppender
ConsoleAppender 把日志输出到控制台,有以下子节点:
<encoder>:对日志进行格式化。
详情参考https://www.cnblogs.com/ClassNotFoundException/p/6964435.html
<target>:字符串System.out(默认)或者System.err(区别不多说了)
FileAppender:把日志添加到文件,有以下子节点:
<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
<encoder>:对记录事件进行格式化。(具体参数稍后讲解 )
<prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。
RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:
<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
<rollingPolicy>:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy,是最受欢迎的滚动政策,例如按天或按月。 TimeBasedRollingPolicy承担翻滚责任以及触发所述翻转的责任。TimeBasedRollingPolicy支持自动文件压缩。
有时您可能希望按日期归档文件,但同时限制每个日志文件的大小,特别是如果后处理工具对日志文件施加大小限制。为了满足这一要求,logback随附 SizeAndTimeBasedRollingPolicy。
请注意除“%d”之外的“%i”转换标记。%i和%d令牌都是强制性的。每当当前日志文件在当前时间段结束之前达到maxFileSize时,它将以增加的索引存档,从0开始。
项目实例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<property name="LOG_HOME" value="C:\log"/>
<property name="LOG_PREFIX" value="web-xxx"/>
<!--
%p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r:输出自应用启动到输出该日志讯息所耗费的毫秒数
%t:输出产生该日志事件的线程名
%f:输出日志讯息所属的类别的类别名
%c:输出日志讯息所属的类的全名
%d:输出日志时间点的日期或时间,指定格式的方式: %d{yyyy-MM-dd HH:mm:ss}
%l:输出日志事件的发生位置,即输出日志讯息的语句在他所在类别的第几行。
%m:输出代码中指定的讯息,如log(message)中的message
%n:输出一个换行符号
-->
<!--
Appender: 设置日志信息的去向,常用的有以下几个
ch.qos.logback.core.ConsoleAppender (控制台)
ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新文件)
ch.qos.logback.core.FileAppender (文件,不推荐使用)
-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<!– 被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建 –>-->
<File>${LOG_HOME}/${LOG_PREFIX}-info.log</File>
<!--<encoder>:对记录事件进行格式化。-->
<encoder>
<!--格式化输出:%d表示日期,后面跟时间格式,默认%data{yyyy-MM-dd},%thread表示线程名, %msg:日志消息,%n是换行符-->
<pattern>%date [%level] [%thread] %logger{60} [%file : %line] %msg%n</pattern>
</encoder>
<!--RollingFileAppender:-->
<!--滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<!--<rollingPolicy>:当发生滚动时,决定RollingFileAppender 的行为,涉及文件移动和重命名。-->
<!--TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--<fileNamePattern>:
必要节点,包含文件名及“%d”转换符, “%d”可以包含一个 java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。
如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender 的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;
如果没设置file,活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。-->
<!--<fileNamePattern>${LOG_HOME}/daily/${LOG_FILE}.%d{yyyy-MM-dd}.gz</fileNamePattern>-->
<!--压缩文件的保存路径以及保存格式,这里必须将文件压缩,.%i 必须有。如果按上面的配置会报错-->
<fileNamePattern>${LOG_HOME}/daily/${LOG_FILE}_%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--保存文件的大小,超过该大小自动创建新文件。旧文件压缩保存到daily目录下-->
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--<!– 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,如果是6,则只保存最近6天的文件,删除之前的旧文件 包括压缩文件 –>-->
<!--<!– 每产生一个日志文件,该日志文件的保存期限天数 –>-->
<maxHistory>1</maxHistory>
</rollingPolicy>
</appender>
<!--root是默认的logger 这里设定输出级别是info-->
<root level="INFO">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
官方文档参考: