logback配置日志

来源:互联网 发布:数据存储四种方式 编辑:程序博客网 时间:2024/05/20 23:04

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] info20170706:15:41:10.148 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm20170706: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] debug20170706:15:41:10.147 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info20170706:15:41:10.148 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm20170706:15:41:10.148 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error20170706: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] info20170706:16:29:27.706 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info20170706:16:29:27.707 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm20170706:16:29:27.707 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm20170706:16:29:27.707 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error20170706: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

原创粉丝点击