天天看點

spring boot log4j 對比 log4j2 日志架構管理

測試:同步情況下 結果如下:

log4j 測試列印 100000次 平均值在 17秒~18秒左右。

spring boot log4j 對比 log4j2 日志架構管理

log4j2 測試列印 100000次 平均值在 15秒左右。

spring boot log4j 對比 log4j2 日志架構管理

異步處理模式:

spring boot log4j 對比 log4j2 日志架構管理

所有日志均為異步執行。

使用方式:

pom.xml

<!--Web依賴- 排除自帶的tomcat-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions><!-- 去掉logback配置 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency> <!-- 引入log4j2依賴 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!--        開啟異步必須要加入下面依賴,否者會抛異常-->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.4.2</version>
        </dependency>
           

配置方式:

<?xml version='1.0' encoding='UTF-8' ?>
<configuration status="info" name="defaultLogConfig" monitorInterval="10">

    <properties>
        <property name="PRO_NAME">logs</property>
        <property name="PATTERN_LAYOUT">%date{dd HH:mm:ss.SSS} %highlight{%-5level}|%style{%X{requestId}}|%l:%m%n </property>
<!--        <property name="PATTERN_LAYOUT">%d %highlight{%-5level}{ERROR=Bright RED, WARN=Bright Yellow, INFO=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White} %style{[%t]}{bright,magenta} %style{%c{1.}.%M(%L)}{cyan}: %msg%n</property>-->
        <property name="PATTERN_ERROR">%date{dd HH:mm:ss.SSS} %highlight{%-5level|%X{requestId}| %l:%m%n}
        </property>
    </properties>

    <Appenders>
        <Console name="ConsoleInfo" target="SYSTEM_OUT" follow="true">
            <Filters>
                <!--            如果是error級别拒絕-->
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <!--            如果是debug\info\warn輸出-->
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="${PATTERN_LAYOUT}" charset="UTF-8"/>
        </Console>
        <Console name="ConsoleError" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${PATTERN_ERROR}" charset="UTF-8"/>
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </Console>
        <!--warn及以下日志-->
        <RollingFile name="FileInfo" fileName="${PRO_NAME}/info.log"
                     filePattern="${PRO_NAME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd HH時mm分}-%i.log.gz">
            <PatternLayout pattern="${PATTERN_LAYOUT}"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                <!--單個檔案大小-->
                <SizeBasedTriggeringPolicy size="100MB"/>
            </Policies>
            <!--儲存日志檔案個數-->
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>

        <!--error級别日志 單獨再儲存一份 輸出-->
        <RollingFile name="FileError" fileName="${PRO_NAME}/error.log"
                     filePattern="${PRO_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd HH mm ss}-%i.log.gz">
            <PatternLayout pattern="${PATTERN_ERROR}"/>
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <Policies>
            <!--        間隔6小時 -->
                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
        <!--        普通日志 通過異步輸出-->
        <Async name="FileInfoAsync" bufferSize="1024"  >
            <AppenderRef ref="FileInfo"/>
        </Async>
        <Async name="ConsoleFileInfoAsync" bufferSize="1024"  >
            <AppenderRef ref="ConsoleInfo"/>
        </Async>
    </Appenders>

    <Loggers>
        <!--        異步日志沒法列印   位置資訊包括:%C or %class, %F or %file, %l or %location, %L or %line, %M or %method 報錯行數 等關鍵資訊-->
        <!--        錯誤日志通過異步輸出-->
        <Logger name="com.yxkj" level="info" additivity="false">
            <!-- 上線的時候必須将控制台列印注釋掉ConsoleError  ConsoleFileInfoAsync -->
            <AppenderRef ref="ConsoleError"/>
            <AppenderRef ref="ConsoleInfo"/>
<!--            <AppenderRef ref="ConsoleFileInfoAsync"/>-->
            <!--    下面為檔案日志列印        -->
            <AppenderRef ref="FileInfoAsync"/>
            <AppenderRef ref="FileError"/>
        </Logger>

        <!--        <AsyncLogger level="INFO" includeLocation="true">-->
        <!--            <AppenderRef ref="ConsoleError"/>-->
        <!--            <AppenderRef ref="ConsoleInfo"/>-->
        <!--            <AppenderRef ref="FileInfo"/>-->
        <!--            <AppenderRef ref="FileError"/>-->
        <!--        </AsyncLogger>-->
    </Loggers>
</configuration>

           

繼續閱讀