通過異步打印日志提升系統性能


Logback異步打印日志配置:

<?xml version="1.0" encoding="UTF-8"?>
<!--默認每隔一分鍾掃描此配置文件的修改並重新加載-->
<configuration>
    <!--定義日志文件的存儲地址 勿在LogBack的配置中使用相對路徑-->
    <property name="LOG_HOME" value="/home/work/log/bssoutgoing"/>
    <!--輸出日志到文件中-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/info.log</file>
        <!--不輸出ERROR級別的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <!--根據日期滾動輸出日志策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/info.log.%d{yyyy-MM-dd}</fileNamePattern>
            <!--日志保留天數-->
            <maxHistory>360</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}|%t|%-5level|%X{threadId}|%C{0}#%M:%L|%msg%n</pattern>
        </encoder>
    </appender>
    <!--錯誤日志輸出文件-->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/error.log</file>
        <!--只輸出ERROR級別的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--根據日期滾動輸出日志策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/error.log.%d{yyyy-MM-dd}</fileNamePattern>
            <!--日志保留天數-->
            <maxHistory>360</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}|%t|%-5level|%X{threadId}|%C{0}#%M:%L|%msg%n</pattern>
        </encoder>
    </appender>
    <!--異步打印日志,任務放在阻塞隊列中,如果隊列達到80%,將會丟棄TRACE,DEBUG,INFO級別的日志任務,對性能要求不是太高的話不用啟用-->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <!--隊列的深度,該值會影響性能,默認256-->
        <queueSize>512</queueSize>
        <!--設為0表示隊列達到80%,也不丟棄任務-->
        <discardingThreshold>0</discardingThreshold>
        <!--日志上下文關閉后,AsyncAppender繼續執行寫任務的時間,單位毫秒-->
        <maxFlushTime>1000</maxFlushTime>
        <!--隊列滿了直接丟棄要寫的消息-->
        <neverBlock>true</neverBlock>
        <!--是否包含調用方的信息,false則無法打印類名方法名行號等-->
        <includeCallerData>true</includeCallerData>
        <!--One and only one appender may be attached to AsyncAppender,添加多個的話后面的會被忽略-->
        <appender-ref ref="FILE"/>
    </appender>
    <appender name="ERROR_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <queueSize>256</queueSize>
        <!--設為0表示隊列達到80%,也不丟棄任務-->
        <discardingThreshold>0</discardingThreshold>
        <!--日志上下文關閉后,AsyncAppender繼續執行寫任務的時間,單位毫秒-->
        <maxFlushTime>1000</maxFlushTime>
        <!--隊列滿了直接丟棄要寫的消息,不阻塞寫入隊列-->
        <neverBlock>true</neverBlock>
        <!--是否包含調用方的信息,false則無法打印類名方法名行號等-->
        <includeCallerData>true</includeCallerData>
        <!--One and only one appender may be attached to AsyncAppender,添加多個的話后面的會被忽略-->
        <appender-ref ref="ERROR_FILE"/>
    </appender>

    <!--指定一些依賴包的日志輸出級別,所有的logger會繼承root,為了避免日志重復打印,需指定additivity="false",將不會繼承root的append-ref-->
<!--    <logger name="com.xiaomi.mitv.outgoing" level="ERROR" additivity="false">
        <appender-ref ref="STDOUT"/>
        &lt;!&ndash;<appender-ref ref="ERROR_FILE"/>&ndash;&gt;
    </logger>-->

    <root level="INFO">
        <!--<appender-ref ref="FILE"/>-->
        <!--<appender-ref ref="ERROR_FILE"/>-->
        <!--使用異步打印日志-->
        <appender-ref ref="ASYNC"/>
        <appender-ref ref="ERROR_ASYNC"/>
    </root>
</configuration>

 

END


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM