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>
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: 设置将当前时间(解析配置⽂件的时间)转换为字符串的模式,遵循SimpleDateFormat的格式。
appender
⼦节点<appender>:负责写⽇志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名
appender class 类型主要有三种:ConsoleAppender、FileAppender、RollingFileAppender
ConsoleAppender 把⽇志输出到控制台,有以下⼦节点:
<encoder>:对⽇志进⾏格式化。
详情参考
<target>:字符串System.out(默认)或者(区别不多说了)
FileAppender:把⽇志添加到⽂件,有以下⼦节点:
<file>:被写⼊的⽂件名,可以是相对⽬录,也可以是绝对⽬录,如果上级⽬录不存在会⾃动创建,没有默认值。
<append>:如果是 true,⽇志被追加到⽂件结尾,如果是 false,清空现存⽂件,默认是true。
<encoder>:对记录事件进⾏格式化。(具体参数稍后讲解)
<prudent>:如果是 true,⽇志会被安全的写⼊⽂件,即使其他的FileAppender也在向此⽂件做写⼊操作,效率低,默认是 false。RollingFileAppender:滚动记录⽂件,先将⽇志记录到指定⽂件,当符合某个条件时,将⽇志记录到其他⽂件。有以下⼦节点:
<file>:被写⼊的⽂件名,可以是相对⽬录,也可以是绝对⽬录,如果上级⽬录不存在会⾃动创建,没有默认值。
<append>:如果是 true,⽇志被追加到⽂件结尾,如果是 false,清空现存⽂件,默认是true。
<rollingPolicy>:当发⽣滚动时,决定RollingFileAppender的⾏为,涉及⽂件移动和重命名。属性class定义具体的滚动策略类
class="ch.olling.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/l"/>
<include resource="org/springframework/boot/logging/l"/>
<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.ConsoleAppender (控制台)
ch.olling.RollingFileAppender (⽂件⼤⼩到达指定尺⼨的时候产⽣⼀个新⽂件)log4j2自定义日志文件名
ch.FileAppender (⽂件,不推荐使⽤)
-->
<appender name="FILE" class="ch.olling.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.olling.TimeBasedRollingPolicy">
<!--<fileNamePattern>:
必要节点,包含⽂件名及“%d”转换符, “%d”可以包含⼀个 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.olling.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>
官⽅⽂档参考: