Logback⼊门和配置说明
Logback 是 Log4j 的改进版本,⽽且原⽣⽀持 SLF4J,Logback 的初始化步骤如下:
1. 在类路径中查 l 配置⽂件
2. 在类路径中查 vy 配置⽂件
3. 在类路径中查 l 配置⽂件
4. 如果都没有到,那边就是⽤默认配置,将⽇志输出到控制台
maven 依赖
在使⽤ logback 之前,需要增加相关依赖,slf4j-api 是 slf4j 的核⼼,定义了简单统⼀的接⼝,logback-classic 则是具体的⽇志实现。
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
⽇志⽰例
⾃动⽇志配置
配置最简单的⽅法就是使⽤ logback 的默认配置,默认配置是将⽇志输出到控制台,代码如下:
package org.lixue.slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld{
final static Logger Logger(HelloWorld.class);
public static void main(String[]args){
logger.info("HelloWorld");
}
}
使⽤ l 或 l ⾃动配置
log4j2 appender
在类路径中,创建 l 或 l 配置⽂件,并增加配置如下,该配置等价与⾃动配置:
<configuration>
<appender name="STDOUT" class="ch.ConsoleAppender">
<!--encoders are assigned the type
ch.qos.der.PatternLayoutEncoderbydefault-->
<encoder>
<pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
配置⽂件说明
logback 配置⽂件的语法⾮常灵活。因此, 不可能⽤ DTD ⽂件或 XML 架构指定允许的语法。不过, 配置⽂件的基本结构可以描述为configuration 元素,包含零个或多个 appender 元素,后跟零个或多个 logger 元素,,后跟最多⼀个 root 元素。下图说明了此基本结构。
configuration 配置
该配置是配置⽂件的根节点,主要⽤于配置⽂件的读取及调试相关配置,配置如下:
<configuration scan="true"scanPeriod="60 seconds"debug="false">
<!--其他配置省略-->
</configuration>
scan true配置⽂件如果发⽣改变,将会被重新加载
scanPeriod60000设置监测配置⽂件是否有修改的时间间隔,如果没有给出时间单位,默认单位
是毫秒
debug false将打印出logback内部⽇志信息,实时查看logback运⾏状态
logger 配置
⽤来设置某⼀个包或者具体的某⼀个类的⽇志打印级别,还可以包括零个或多个 appender ⼦元素,配置如下:
<logger name="org.lixue.slf4j" level="info" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
name某⼀个包或者具体的某⼀个类的名称
level设置⽇志打印级别,可⽤值(不区分⼤⼩写) TRACE, DEBUG, INFO,
WARN, ERROR, ALL
additivity true是否向上级传递打印消息,如果为 true,则会打印多条⽇志
appender-ref定义⽇志打印的 appender
root 配置
和 logger 配置⼀样,是根 logger,所有没有指定的 logger 都将使⽤ root 配置,配置如下:
<root level="debug">
<appender-ref ref="STDOUT"/>
</root>
level设置⽇志打印级别,可⽤值(不区分⼤⼩写) TRACE, DEBUG, INFO,
WARN, ERROR, ALL
appender-ref定义⽇志打印的 appender
appender 配置
appender 配置有⼆个必须属性 name 和 class ,这个 name 属性⽤来标识 appender ,class 属性⽤于指定 appender 具体实现类的完整名称。这个 <appender> 元素可以包含零个或⼀个 <layout>元素,零个或多个 <encoder> 元素,零个或多个 <filter> 元素,下图说明了基本结构:
<layout> 元素必须属性为 class , 指定要实例化的布局类的完全名称。<encoder> 元素必须属性为 class,指定要实例化的编码类的完全名称,appender 的继承关系如下:
ConsoleAppender
⽤于将⽇志打印到控制台输出,或者 System.out 或者 中输出⽇志
<appender name="STDOUT" class="ch.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.der.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
FileAppender
FileAppender 是 OutputStreamAppender 的⼦类,它将⽇志事件追加到⽂件中,⽬标⽂件由<file> 指定。如果⽂件已经存在, 则根据<append> 属性的值追加或截断它。
<appender name="FILE" class="ch.FileAppender">
<file>testFile.log</file>
<append>true</append>
<immediateFlush>true</immediateFlush>
<!--encoders are assigned the type
ch.qos.der.PatternLayoutEncoderbydefault-->
<encoder>
<pattern>%-4relative[%thread]%-5level%logger{35}-%msg%n</pattern>
</encoder>
</appender>
file要写⼊的⽂件的名称。如果⽂件不存在, 则创建它,如果⽂件的⽗⽬录不
存在,,FileAppender 将⾃动创建它,,包括任何必要但不存在的⽗⽬录
append true如果为 true, 则会在现有⽂件的末尾追加事件。否则, 如果追加为 false, 则
任何现有⽂件都将被截断
immediateFlush true为 true 表⽰所有消息都会被⽴即输出,设为false则不输出
RollingFileAppender
RollingFileAppender 扩展了滚动⽇志⽂件的功能。例如, 可以记录到名为 ⽂件, 并且⼀旦满⾜某个条件,将其⽇志记录⽬标更改为另⼀个⽂件。有两个重要的⼦组件与 RollingFileAppender 交互。第⼀个 RollingFileAppender ⼦组件,即RollingPolicy 负责执⾏翻转所需的操作。RollingFileAppender 的
第⼆个⼦组件, 即 TriggeringPolicy 将确定翻转发⽣的时间和准确情况。
<appende r name="RollingFile" class="ch.olling.RollingFileAppender">
<file>e:/temp/logs/logFile.log</file>
<append>true</append>
<immediateFlush>true</immediateFlush>
<rollingPolicy class="">
<!--其他配置-->
</rollingPolicy>
<triggeringPolicy class="">
<!--其他配置-->
</triggeringPolicy>
<encoder>
<pattern>%-4relative[%thread]%-5level%logger{35}-%msg%n</pattern>
</encoder>
</appender>
file要写⼊的⽂件的名称。如果⽂件不存在, 则创建它,如果⽂件的⽗⽬录不
存在,,FileAppender 将⾃动创建它,,包括任何必要但不存在的⽗⽬录
append true如果为 true, 则会在现有⽂件的末尾追加事件。否则, 如果追加为 false, 则
任何现有⽂件都将被截断
immediateFlush true为 true 表⽰所有消息都会被⽴即输出,设为false则不输出
rollingPolicy负责执⾏翻转所需的操作
triggeringPolicy确定翻转发⽣的时间和准确情况
RollingPolicy
TimeBasedRollingPolicy
可能是最受欢迎的滚动策略。具体实现类为 ch.olling.TimeBasedRollingPolicy,它根据时间
(例如按天或按⽉) 定义翻转策略,TimeBasedTriggeringPolicy 实现了 RollingPolicy 和 TriggeringPolicy 接⼝。
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
fileNamePattern定义了已滚动 (存档) ⽇志⽂件的名称,其值应由⽂件的名称以及适当放置
的%d{yyyy-MM-dd}转换说明符组成。%d转换说明符可能包含由类指定的
⽇期和时间模式(使⽤SimpleDateFormat);如果配置了 <file> 元
素值,则该配置不⽣效;如果希望启⽤压缩,则只需要修改
fileNamePattern 以 .gz 或 .zip 结尾。
maxHistory保留的最⼤存档⽂件数, 异步删除旧⽂件。例如, 如果指定每⽉翻转, 并将
maxHistory 设置为 6, 则6⽉的存档⽂件将保存在删除了6⽉以上的⽂件
中。注意当删除旧的存档⽇志⽂件时, 为⽇志⽂件存档⽽创建的任何⽂件
夹都将删除
totalSizeCap控制所有存档⽂件的总⼤⼩。超过了总⼤⼩上限时, 将异步删除最旧的存
档。totalSizeCap属性还需要设置 maxHistory 属性,maxHistory 为第⼀
限制,⽽ totalSizeCap 为第⼆限制
cleanHistoryOnStart false如果设置为 true,,将在 appender 启动时执⾏存档删除
SizeAndTimeBasedRollingPolicy
您可能希望将⽂件实质上按⽇期存档,但同时限制每个⽇志⽂件的⼤⼩,特别是在后期处理⼯具对⽇志⽂件施加⼤⼩限制时。该滚动策略就是为了满⾜这⼀要求⽽实现的,具体实现类为
ch.olling.SizeAndTimeBasedRollingPolicy 。
<rollingPolicy class="ch.olling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>e:/temp/logs/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
<maxHistory>5</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
fileNamePattern定义了已滚动 (存档) ⽇志⽂件的名称,其值应由⽂件的名称以及适当放置
的%d{yyyy-MM-dd}转换说明符和 %i 组成。%d转换说明符可能包含由类
指定的⽇期和时间模式(使⽤SimpleDateFormat);%i 转换说明符
是递增的索引 (从0开始);如果希望启⽤压缩,则只需要修改
fileNamePattern 以 .gz 或 .zip 结尾;
maxHistory保留的最⼤存档⽂件数, 异步删除旧⽂件。例如, 如果指定每⽉翻转, 并将
maxHistory 设置为 6, 则6⽉的存档⽂件将保存在删除了6⽉以上的⽂件
中。注意当删除旧的存档⽇志⽂件时, 为⽇志⽂件存档⽽创建的任何⽂件
夹都将删除
totalSizeCap控制所有存档⽂件的总⼤⼩。超过了总⼤⼩上限时, 将异步删除最旧的存
档。totalSizeCap属性还需要设置 maxHistory 属性,maxHistory 为第⼀
限制,⽽ totalSizeCap 为第⼆限制
FixedWindowRollingPolicy
您可能希望将⽂件在固定范围索引内滚动,该滚动策略就是为了满⾜这⼀要求⽽实现的,具体实现类为
ch.olling.FixedWindowRollingPolicy ,由于该策略没有定义翻转发⽣的时间和准确情况,因此还需要配置 triggeringPolicy 来定义翻转发⽣的时间和准确情况。