Logback是log4j的改良,更好更快更强大的性能
主要模块:
logback-access:与servlet容器集成,提供通过Http访问日志的功能。
logback-classic:log4j的改良版本。
logback-core:为上两个提供基础的服务。
主要标签:
logger:作为日志的记录器,主要用于存放日志对象,也可以定义日志的类型、级别等。
appender:指定日志输出的目的地(既媒介:控制台、文件、远程服务器等)。
layout:格式化日志信息的输出。
日志级别:
trace < debug < info < warn < error
工作原理:
如果不进行配置,JDK1.6以上的会调用com.qos.logback.classic.spi.Configurator接口里的第一个实现类。
如果都没有配置,会调用ch.qos.logback.classic.BasicConfigurator这个实现类,在控制台中输出日志。
相关配置:
<configuration scan="true" scanPeriod="60 seconds" debug="false">
scan:当属性设置为true时,日志文件如果发生改变,将会重新被加载。
scanPeriod:设置检测日志文件是否有修改时间的时间间隔,默认是毫秒。
debug:是否打印logback内部的日志信息,查看logback的运行状态,一般不需要。
设置记录日志的级别
<configuration name="log.level" value="debug" />
设置日志文件保留的时间
<configuration name="log.maxHistory" value="30" />
设置日志文件保存的位置
<configuration name="log.filePath" value="${catalina.base}/logs/webapps" />
设置日志展示的格式、标识程序属于哪个线程执行、什么级别、相关的日志信息、%n是换行符
<configuration name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} [%thead] %-5level %logger{50} - %msg%n" />
</configuration>
以下是详细日志代码设置:
<?xml version="1.0" encoding="UTF-8" ?>
<!--scan:true时,当日志文件发生改变,将会被重新加载-->
<!--debug:false时,不打印logback内部的日志信息-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义参数变量 -->
<!-- 设置记录四个级别的日志信息 debug < info < warn < error-->
<property name="log.level" value="debug"/>
<!-- 设置日志文件保留的时间 -->
<property name="log.maxHistory" value="30"/>
<!-- 设置日志文件保存的位置 -->
<property name="log.filePath" value="${catalina.base}/logs/webapps"/>
<!-- 设置日志展示的格式、标识程序属于哪个线程执行、什么级别、相关的日志信息、%n是换行符 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thead] %-5level %logger{50} - %msg%n"/>
<!-- 控制台设置 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- DEBUG -->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/debug.log</file>
<!-- 滚动策略:基于时间-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<!-- 将日志信息转化为字符串,以log.pattern的格式输出到文件里 -->
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤掉不是DEBUG的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch> //如果是DEBUG级别的日志信息,则记录
<onMismatch>DENY</onMismatch> //如果不是DEBUG级别的则过滤掉
</filter>
</appender>
<!-- INFO -->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/info.log</file>
<!-- 滚动策略:基于时间-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<!-- 将日志信息转化为字符串,以log.pattern的格式输出到文件里 -->
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤掉不是DEBUG的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch> //如果是INFO级别的日志信息,则记录
<onMismatch>DENY</onMismatch> //如果不是INFO级别的则过滤掉
</filter>
</appender>
<!-- ERROR -->
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/error.log</file>
<!-- 滚动策略:基于时间-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<!-- 将日志信息转化为字符串,以log.pattern的格式输出到文件里 -->
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤掉不是DEBUG的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch> //如果是ERROR级别的日志信息,则记录
<onMismatch>DENY</onMismatch> //如果不是ERROR级别的则过滤掉
</filter>
</appender>
<!-- 存放日志对象,同时设置logback关注哪个package下的信息,哪个level以上的日志信息 -->
<logger name="com.hlt" level="${log.level}" additivity="true">
<!-- additivity="true"会将父类root里的appender-ref属性也加在logger里,其余不变 -->
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="errorAppender"/>
</logger>
<!-- 父级logger,如果上面没有找到对应的level,则继承root下的level,仅输出info级别以上的信息 -->
<root level="info">
<appender-ref ref="consoleAppender"/>
</root>
</configuration>