天天看点

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>

           

继续阅读