springboot中log4j2日志框架的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

  

 

以上是关于springboot中log4j2日志框架的使用的主要内容,如果未能解决你的问题,请参考以下文章

关于SpringBoot 项目中使用Log4j2详细

SpringBoot日志框架选型——Log4j2的配置与使用

SpringBoot 使用 log4j2

SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印

SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印

SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印