• springboot中log4j2日志框架的使用


    一、常用日志框架以及其关系

      目前我们常见的日志框架为log4j、log4j2、logback,他们三者关系为,最先有log4j,然后作者觉得log4j有很大的性能问题因此又重写了一个logback,并抽象出一个日志门面slf4j。由于之前log4j的问世,Apache就借鉴了log4j的部分原理,自己重写了一个日志框架log4j2并且也实现了slf4j日志门面。

      log4j2毕竟是Apache自己开发的产品,所以很NB,由于过于优秀所以springBoot默认的日志框架并没有采用log4j2,而是采用了logback框架,以及slf4j日志门面。

     二、SpringBoot中如何使用日志框架

      1.如果想用logback框架,则直接在根目录下添加一个logback.xml配置文件即可,配置文件内容可自行找度娘。

      2.如果想用log4j2框架,则需先移除springboot中的默认的logback框架,以及spring中自带的日志框架,并在根目录下添加log4j2.xml配置文件即可,具体配置找度娘,或者参考我的样本。

        ①.移除springboot中的默认日志框架:spring-boot-starter-logging

        ②.引入log4j2框架jar包:spring-boot-starter-log4j2

        ③.移除spring中的jar包:commons-logging

        ④.添加相应的配置文件

      3.推荐使用log4j2日志框架,其中有个异步日志配置,性能提升较大,大家可以研究一下。

    提示:一个项目中应该只用一种日志框架,所以一定要在pom.xml中将其余框架引入的日志框架去除,或采用相应的替换jar包替换

    三、log4j2框架配置文件样本

      logback配置文件示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- <configuration status="OFF" packages="com.xyebank.hzx.core.log4j2"> -->
    <configuration status="OFF">
        <properties>
            <!-- 当前日志文件路径 -->
            <property name="fileSavePath" value="/home/logs/sweep/sweep(${hostName}).log"/>
            <property name="errorFileSavePath" value="/home/logs/sweep/sweep(${hostName})-error.log"/>
            <!-- 历史日志文件路径 -->
            <property name="fileBackSavePath" value="/home/backlogs/sweep"/>
            <!-- 日志级别 -->
            <property name="logLevel" value="debug"/>
            <property name="layoutPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}---[%-5level]---[%-32X{traceId}]---[%-16.16thread]---[%c{64}] : %msg%n" />
        </properties>
        <!-- 日志主配置 -->
        <appenders>
            <!-- 控制台 -->
            <Console name="Console" target="SYSTEM_OUT">
                <!-- <SensitiveDataPatternLayout pattern="${layoutPattern}" /> -->
                <PatternLayout pattern="${layoutPattern}"/>
            </Console>
            <!-- 文件 -->
            <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="${fileSavePath}" filePattern="${fileBackSavePath}-%d{yyyy-MM-dd}.%i.log.zip">
                <!-- <SensitiveDataPatternLayout pattern="${layoutPattern}" /> -->
                <PatternLayout pattern="${layoutPattern}"/>
                <Policies>
                    <SizeBasedTriggeringPolicy size="200MB" />
                </Policies>
                <DefaultRolloverStrategy max="30" />
            </RollingRandomAccessFile>
            <!-- 错误日志 -->
            <RollingRandomAccessFile name="ERROR" fileName="${errorFileSavePath}" filePattern="${fileBackSavePath}-error-%d{yyyy-MM-dd}.%i.log.zip">
                <!-- <SensitiveDataPatternLayout pattern="${layoutPattern}" /> -->
                <PatternLayout pattern="${layoutPattern}"/>
                <Filters>
                    <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>
                <Policies>
                    <SizeBasedTriggeringPolicy size="200MB" />
                </Policies>
                <DefaultRolloverStrategy max="30" />
            </RollingRandomAccessFile>
        </appenders>
    
        <!--过滤掉部分组件的其余错误信息-->
        <loggers>
    <!--        <AsyncLogger name="org.apache.zookeeper" level="error" additivity="false">-->
    <!--            <appender-ref ref="RollingRandomAccessFile" />-->
    <!--            <appender-ref ref="ERROR" />-->
    <!--            <appender-ref ref="Console" />-->
    <!--        </AsyncLogger>-->
    <!--        <AsyncLogger name="com.alibaba.dubbo" level="error" additivity="false">-->
    <!--            <appender-ref ref="RollingRandomAccessFile" />-->
    <!--            <appender-ref ref="ERROR" />-->
    <!--            <appender-ref ref="Console" />-->
    <!--        </AsyncLogger>-->
    <!--        <AsyncLogger name="org.I0Itec.zkclient" level="error" additivity="false">-->
    <!--            <appender-ref ref="RollingRandomAccessFile" />-->
    <!--            <appender-ref ref="ERROR" />-->
    <!--            <appender-ref ref="Console" />-->
    <!--        </AsyncLogger>-->
    <!--        <AsyncLogger name="org.mongodb.driver.cluster" level="error" additivity="false">-->
    <!--            <appender-ref ref="RollingRandomAccessFile" />-->
    <!--            <appender-ref ref="ERROR" />-->
    <!--            <appender-ref ref="Console" />-->
    <!--        </AsyncLogger>-->
    <!--        <AsyncRoot level="${logLevel}">-->
    <!--            <appender-ref ref="RollingRandomAccessFile" />-->
    <!--            <appender-ref ref="ERROR" />-->
    <!--            <appender-ref ref="Console" />-->
    <!--        </AsyncRoot>-->
    
            <Root level="${logLevel}" >
                <appender-ref ref="RollingRandomAccessFile"/>
                <appender-ref ref="ERROR" />
                <appender-ref ref="Console" />
            </Root>
        </loggers>
    </configuration>

      

  • 相关阅读:
    对于delphi 三层的理解
    XE6调用android标准功能
    修复 XE7 Frame 内 PopupMenu 快捷键失效问题 by 龟山阿卍
    最大熵模型 二
    最大熵模型
    算法复习-平面内极大值点
    算法复习-生成全排列
    算法复习-归并排序
    算法复习-快速排序
    连续特征的离散化
  • 原文地址:https://www.cnblogs.com/zblwyj/p/13157687.html
Copyright © 2020-2023  润新知