logback配置
一、logback介绍
logback分成三个模块:logback-core,logback- classic,logback-access。
logback-core:提供了logBack的核心功能,是另外两个组件的基础;
logback-classic:实现了SLF4J API;
logback-access:与Servlet容器集成提供Http来访问日志的功能。
二、logback使用
1、快速上手
1)添加依赖
<dependency> <groupId>ch.qos.logbackgroupId> <artifactId>logback-classicartifactId> <version>1.0.13version> dependency>
2)在resource目录下新建配置文件logback.xml
<configuration > <property name="pattern" value="%d{HH:mm:ss.SSS} [%-5level] [%thread] [%logger] %msg%n"/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${pattern}pattern> encoder> appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/tmp/log.outfile> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>testLog-%d{yyyy-MM-dd}.logfileNamePattern> <maxHistory>30maxHistory> rollingPolicy> <encoder> <pattern>${pattern}pattern> encoder> appender> <root level="DEBUG"> <appender-ref ref="FILE" /> <appender-ref ref="CONSOLE" /> root> configuration>
2、logback配置详解
logback配置文件结构如下:
1)配置根节点configuration
<configuration scan="true" scanPeriod="60" debug="false">configuration>
scan:程序运行时配置文件被修改,是否重新加载。true,重新加载;false,不重新加载;默认为true;
scanPeriod:监测配置文件被修改的时间间隔,scan属性必须设置为true才可生效;默认为1分钟,默认单位是毫秒;
debug:是否打印logback程序运行的日志信息。true,打印;false,不打印;默认为false;
2)自定义属性变量property
<property name="pattern" value="%d{HH:mm:ss.SSS} [%-5level] [%logger] %msg%n" >property>
我们可以通过property定义一些列属性,然后通过 ${} 的方式来使用,将变量引入到其他节点中去。如果有多处使用相同的内容,便可使用属性变量的方式进行统一,减少很多不必要的代码;
3)日志对象logger
logger分为2种,一种是普通日志对象,另一种是根日志对象。对于大部分应用来说,只设置根日志对象即可。 在java日志系统中,无论是log4j还是logback,他们的日志对象体系都是呈现“树”的形式,根日志对象为最顶层节点,其余包或者类中的日志对象都继承于根日志节点; 对于普通日志对象来说,我们可以设置某一个包或者某一个类的日志级别,还可以单独设置日志的输出目的地。
<logger name="java.sql" level="debug" addtivity="true"> <appender-ref ref="CONSOLE" /> logger>
name:用来指定此logger属于哪个包或者哪个类;
level:用来指定此logger的日志打印级别;
addtivity:是否向上传递日志打印信息。之前说了,logger对象呈现一个树的结构,根logger是树的顶端,下面的子logger的addtivity属性如果设置为true则会向上传递打印信息,出现日志重复打印的现象;
appender-ref:日志输出目的地,将此logger所打印的日志交给此appender;
上面的例子中,如果此logger没有指定appender,而且addtivity也设置为true,那么此logger对应的日志信息只会打印一遍,是由root来完成的;但是如果addtivity设置成false,那么此logger将不会输出任何日志信息;
4)根日志对象root
<root level="DEBUG"> <appender-ref ref="CONSOLE" /> root>
跟日志也是日志对象中的一种,但它位于logger体系中的最顶层。当一个类中的logger对象进行打印请求时,如果配置文件中没有为该类单独指定日志对象,那么都会交给root根日志对象来完成;
5)日志输出目的地appender
appender整体结构如下:
appender中有2个必填属性name和class。name为节点的名称,class为的全限定类名,也就是日志输出目的地的处理类。此外,我们还可以在中单独指定日志的格式,设置日志过滤器等操作;
在logback中,主要有以下三种日志目的地处理类:
ch.qos.logback.core.ConsoleAppender:将日志输出到控制台
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %npattern> encoder> appender>
ch.qos.logback.core.FileAppender:日志输出到文件;
<appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>e:/log.outfile> <append>trueappend> <prudent>falseprudent> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%npattern> encoder> appender>
ch.qos.logback.core.rolling.RollingFileAppender:滚动记录日志,当符合
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/tmp/log.outfile> <append>trueappend> <prudent>falseprudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>testLog-%d{yyyy-MM-dd}.logfileNamePattern> <maxHistory>30maxHistory> rollingPolicy> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%npattern> encoder> appender>
其中
ch.qos.logback.core.rolling.TimeBasedRollingPolicy:根据时间制定日志文件的滚动策略;
ch.qos.logback.core.rolling.FixedWindowRollingPolicy:表示如果日志文件大小超过指定范围时,会根据文件名拆分成多个文件;
ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy:表示根据日志文件大小,超过指定大小会触发日志滚动;
ch.qos.logback.classic.AsyncAppender:异步记录日志,内部通过使用缓存的方式来实现异步打印,将日志打印事件event放入缓存中。具体数据结构为BlockingQueue;
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/tmp/log.outfile> <append>trueappend> <prudent>falseprudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>testLog-%d{yyyy-MM-dd}.logfileNamePattern> <maxHistory>30maxHistory> rollingPolicy> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%npattern> encoder> appender>
6)日志格式化节点encoder
负责格式化日志信息。
在
<encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%npattern> encoder>
%logger:表示输出logger名称,后面跟一个{0}表示:只输出logger最右边点符号之后的字符串;例如:com.jiaboyan.test ---> test;
%d{HH:mm:ss.SSS}:表示格式化日期输出,14:06:49.812;
%line:输出执行日志请求的行号。
%thread:表示产生日志的线程名;
%level:输出日志级别;
%method:输出执行日志请求的方法名;
%class:输出日志打印类的全限定名,后面跟{0}表示,含义为全限定类名最右边点符号之后的字符串。例如:com.jiaboyan.test ---> test;
%-4relative含义:符号减号“-”是左对齐 标志,接着是可选的最小宽度 修饰符,用十进制数表示。relative是输出从程序启动到创建日志记录的时间,单位是毫秒;
%msg:表示应用程序提供需要打印的日志信息;
%n:表示换行符;