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在项目中如何使用的主要内容,如果未能解决你的问题,请参考以下文章

github如何提交自己修改的代码

如何在recyclerview不同的项目点击上打开几个不同的片段?

logback配置文件详解

logback的使用和logback.xml详解,在Spring项目中使用log打印日志

logback使用以及详细配置

千万项目Logback项目使用总结