Logback配置异步输出日志

    为了加快程序的响应,日志异步打印是很有必要的。这里贴一个配置异步日志的xml,方便后续查阅

一、原理

    logback的异步打印日志,原理就是用了一个阻塞队列来缓冲。具体可以参考源码ch.qos.logback.core.AsyncAppenderBase
        

二、参数说明

    1. queueSize队列大小,默认256
    2. discardingThreshold,默认为-1,当队列还有20%容量时,会丢弃日志(这里指info及以下级别才会丢弃),设置为 0 可以不丢弃
        
        

    3. includeCallerData是否提取调用者信息,默认为false,一般不用配置
        4. neverBlock当队列满了后是阻塞线程还是丢日志,默认是false,阻塞线程,这里要注意一下

三、贴个配置

这个配置很简单,套路如下:
    1. 配置一个正常的appender
    2. 配置一个异步appender,ref指向上面的那个appender
    3. 配置logger使用异步appender
本质就是用异步appender来包装了一次;可以参考下面配置文件
<?xml version="1.0" encoding="UTF-8"?>

<!--用户行为日志-->
<included>
    <springProperty scope="context" name="ACTION_LOG_HOME" source="ACTION_LOG_HOME" defaultValue="logs"/>
    <springProperty scope="context" name="ACTION_LOG_HOME_EXT" source="ACTION_LOG_HOME_EXT" defaultValue="action"/>
    <springProperty scope="context" name="ACTION_MAX_FILE_SIZE" source="ACTION_MAX_FILE_SIZE" defaultValue="1GB"/>
    <springProperty scope="context" name="ACTION_LOG_FILE_MAX_HISTORY" source="ACTION_LOG_FILE_MAX_HISTORY" defaultValue="7"/>

    <!--日志appender-->
    <appender name="ACTION_LOG_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--自定义输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${ACTION_PATTERN:-%msg%n}</pattern>
        </encoder>
        <!--默认生成的日志文件名字-->
        <file>${ACTION_LOG_HOME}/${ACTION_LOG_HOME_EXT}/actionLog.log</file>

        <!--文件超出大小后的处理-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${ACTION_LOG_HOME}/${ACTION_LOG_HOME_EXT}/actionLog.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <!-- each file should be at most 300MB, keep 15 days worth of history, but at most 20GB -->
            <maxFileSize>${ACTION_MAX_FILE_SIZE}</maxFileSize>
            <!--保留15天-->
            <maxHistory>${ACTION_LOG_FILE_MAX_HISTORY}</maxHistory>
            <totalSizeCap>30GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!--异步输出 appender-->
    <appender name="ACTION_LOG_APPENDER_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <neverBlock>true</neverBlock>
        <!-- 队列的最大容量,该值会影响性能.默认值为256 -->

        <queueSize>1024</queueSize>
        <!-- 队列剩余容量小于discardingThreshold,则会丢弃TRACT、DEBUG、INFO级别的日志;默认值-1,为queueSize的20%;0不丢失日志 -->
        <discardingThreshold>0</discardingThreshold>

        <!-- 队列满了,是否阻塞,默认为false;如果配置为true,则队列满了就丢弃日志; -->
        <neverBlock>false</neverBlock>

        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="ACTION_LOG_APPENDER"/>
    </appender>

    <!--配置logger,指向异步appender-->
    <logger name="com.cybermax.manager.log.printer" additivity="false" level="info">
        <appender-ref ref="ACTION_LOG_APPENDER_ASYNC"/>
    </logger>

</included>

四、参考链接

    1. 官网 https://logback.qos.ch/manual/appenders.html

posted @ 2022-06-07 10:09  zeng1994  阅读(3467)  评论(0编辑  收藏  举报