Logback在项目中如何使用
Posted 今夜满天星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Logback在项目中如何使用相关的知识,希望对你有一定的参考价值。
1. 需求
在项目中如何根据日志的级别分开打印日志文件
如何异步打印日志,提高RT(响应时间)
2.实现
2.1 匹配error以下级别
<appender name="INFO-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
.......
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>q
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
</appender>
2.2 匹配error级别
<appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
......
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
分别介绍这两个配置项的三个属性值:
onMatch="ACCEPT" 表示匹配该级别及以上
onMatch="DENY" 表示不匹配该级别及以上
onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
onMismatch="ACCEPT" 表示匹配该级别以下
onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
onMismatch="DENY" 表示不匹配该级别以下的
2.3 异步配置
<!-- 使用AsyncAppende -->
<appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>512</queueSize>
<discardingThreshold>0</discardingThreshold>
<!-- 实际负责写日志的appender,最多只能添加一个 -->
<appender-ref ref="INFO-LOG" />
</appender>
3.详细配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 管控台日志打印,发布生产需注释 -->
<appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="utf-8"> <!-- encoder 可以指定字符集,对于中文输出有意义 -->
<!-- %.-1level 只显示信息级别的首字母,%-5level 左对齐显示信息级别全称 -->
<!-- 如需自定义关键字,用 %mdc{键名} 表示,程序中用MDC.put("键名","键值")设置,可动态设置 [%logger:%line]-->
<Pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%X{TRACE_LOG_ID}] [%logger{40}] %msg%n</Pattern>
</encoder>
>
</appender>
<!-- error 级别日志文件 -->
<appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>/data/log/test-error.log</File>
<encoder>
<Pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%X{TRACE_LOG_ID}] [%logger{40}] %msg%n</Pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/log/test-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>512MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 普通日志文件,排除错误日志 -->
<appender name="INFO-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>/data/log/test-info.log</File>
<encoder>
<Pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%X{TRACE_LOG_ID}] [%logger{40}] %msg%n</Pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/log/test-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>512MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>q
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
</appender>
<!--2.异步appender -->
<appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
<!--内部实现是一个有界ArrayBlockingQueue,queueSize是队列大小。该值会影响性能.默认值为256-->
<queueSize>512</queueSize>
<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。
为了保持所有的events,设置该值为0-->
<discardingThreshold>0</discardingThreshold>
<!-- 非阻塞 -->
<neverBlock>true</neverBlock>
<!--实际负责写日志的appender,最多只能添加一个-->
<appender-ref ref="INFO-LOG" />
</appender>
<appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
<!--内部实现是一个有界ArrayBlockingQueue,queueSize是队列大小。该值会影响性能.默认值为256-->
<queueSize>512</queueSize>
<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。
为了保持所有的events,设置该值为0-->
<discardingThreshold>0</discardingThreshold>
<!-- 非阻塞 -->
<neverBlock>true</neverBlock>
<!--实际负责写日志的appender,最多只能添加一个-->
<appender-ref ref="ERROR-LOG" />
</appender>
<!-- 外部jar包 日志级别设置 -->
<logger level="INFO" name="org.apache"/>
<logger level="INFO" name="com.ctrip.framework.apollo"/>
<logger level="INFO" name="org.springframework"/>
<root level="INFO" >
<!-- 控台默认不输出 -->
<appender-ref ref="CONSOLE-LOG"/>
<appender-ref ref="ASYNC-INFO"/>
<appender-ref ref="ASYNC-ERROR"/>
</root> </configuration>
以上是关于Logback在项目中如何使用的主要内容,如果未能解决你的问题,请参考以下文章
如何在recyclerview不同的项目点击上打开几个不同的片段?