logback的详细介绍网上有很多:http://blog.csdn.net/jibaole/article/details/52442694(参考文档)
使用方法:
当我们分清了log4j,logback和slf4j的关系后,我们就可以使用它们了。这里我们主要介绍logback和 slf4j的使用配置方法。
因为logback和 slf4j的开发者是一样的,所以logback很好的与slf4j兼容,下面在maven中导入了两个jar包的引用,一个是logback,一个是slf4j的包,就可以开始记录日志了。
<!--日志管理-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.15</version>
</dependency>
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 输出规则 -->
<property name="pattern" value="%d{yyyyMMdd:HH:mm:ss.SSS} [%-5level] [%thread] [%C:%L] %msg%n"/>
<!--日志输出位置-->
<property name="LOG_DIR" value="${APP_HOME}/logs"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<target>System.out</target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>{LOG_DIR}/lk_ssm_dome%d{yyyy-MM-dd}.%i.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_DIR}/com_lk_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--文件最大为10MB,最多为30个,总的不超过20GB-->
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!-- 只记录error级别,onMatch符合的接收,不符合略过-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 处理com.lk包下面的,additivity="false"不打印上级 -->
<logger name="com.lk" additivity="false">
<level value="info"/>
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</logger>
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
输出的用法因为使用slf4j的关系,都是一样的。
public Result<Object> logTest() {
log.debug("debug");
log.info("info");
log.warn("warm");
log.error("error");
log.trace("trace");
return Result.success(null);
}
日志的格式
<!-- 输出规则配置 -->
<property name="pattern" value="%d{yyyyMMdd:HH:mm:ss.SSS} [%-5level] [%thread] [%C:%L] %msg%n"/>
输出日志格式:
20170706:15:41:10.147 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
并在后面的如果要使用配置规则,只要使用${pattern}就可以了。
日志的级别和显示:
日志的级别划分:
TRACE、DEBUG、INFO、WARN 和 ERROR
打印方法决定记录请求的级别。例如,如果 L 是一个 logger 实例,那么,语句 L.info(“..”)是一条级别为 INFO的记录语句。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,否则,称为被禁用。记录请求级别为 p,其 logger的有效级别为 q,只有则当 p>=q时,该请求才会被执行。
该规则是 logback 的核心。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR
节点是必须需要的节点,它的level的属性代表了日志的级别,例如当我们设置为”info”时,控制台只会显示大于等于INFO的日志:
20170706:15:41:10.147 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
20170706:15:41:10.148 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm
20170706:15:41:10.148 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error
当我们设置成trace时,控制台会打印全部的日志。
20170706:15:41:10.146 [DEBUG] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:34] debug
20170706:15:41:10.147 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
20170706:15:41:10.148 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm
20170706:15:41:10.148 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error
20170706:15:41:10.148 [TRACE] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:38] trace
appender标签代表处理日志的方法,我们在root中使用了STDOUT的appender,里面只对日志的格式做了格式的规定。名为FILE的appender用file来记录日志。
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<target>System.out</target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--文件保存日志 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_DIR}/com_lk_error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_DIR}/com_lk_error_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--文件最大为10MB,最多为30个,总的不超过20GB-->
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!-- 只记录error级别,onMatch符合的接收,onMismatch不符合略过-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
除此之外,我们可以使用log对不同的包的日志做不同的处理,例如下面的设置,对该包下面的info日志做处理,处理方式分别是FILE和STDOUT设置方式。
<!-- 处理com.yingjun包下面的,additivity="false"不打印上级 -->
<logger name="com.yingjun" additivity="true">
<level value="info"/>
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</logger>
additivity设置为false时,不打印上级日志,也就是不打印中相同的日志。当我们设置成true时,我们的日志在时又会打印一遍。
20170706:16:29:27.706 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
20170706:16:29:27.706 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
20170706:16:29:27.707 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm
20170706:16:29:27.707 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm
20170706:16:29:27.707 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error
20170706:16:29:27.707 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error
参考:
http://blog.csdn.net/haidage/article/details/6794509/
http://blog.csdn.net/yingxiake/article/details/51274426