当前位置: 代码迷 >> 综合 >> Spring Boot中整合slf4j+log4j2
  详细解决方案

Spring Boot中整合slf4j+log4j2

热度:24   发布时间:2023-12-26 06:36:16.0

首先在pom中加入依赖

<!--log配置:Log4j2+Slf4j-->

<dependency>

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-api</artifactId>

<version>2.2</version>

</dependency>

<dependency>

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-core</artifactId>

<version>2.2</version>

</dependency>

<dependency><!--桥接:告诉Slf4j使用Log4j2-->

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-slf4j-impl</artifactId>

<version>2.2</version>

</dependency>

<dependency><!--桥接:告诉commonslogging使用Log4j2-->

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-jcl</artifactId>

<version>2.2</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>1.7.10</version>

</dependency>

一般加入后都会有依赖冲突,根据执行  mvn dependency:tree  -Dverbose 来看哪些依赖一 一排除即可

接下来是配置log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>

 

<!--

    status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出

    monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。此处表示每隔600秒重读一次配置文件

-->

<Configuration status="OFF" monitorInterval="600">

 

    <!--日志级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL-->

    <!--如果设置为WARN,则低于WARN的信息都不会输出-->

    <Properties>

        <!-- 配置日志文件输出目录,此处为项目根目录下的logs文件夹 -->

        <Property name="LOG_HOME">logs</Property>

        <property name="FILE_NAME">cnblogs</property>

    </Properties>

 

    <Appenders>

        <!--这个输出控制台的配置-->

        <Console name="Console" target="SYSTEM_OUT">

            <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->

            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>

            <!--日志输出的格式-->

            <!--

                %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间,输出到毫秒的时间

                %-5level : 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0

                %c : logger的名称(%logger)

                %t : 输出当前线程名称

                %p : 日志输出格式

                %m : 日志内容,即 logger.info("message")

                %n : 换行符

                %C : Java类名(%F)

                %L : 行号

                %M : 方法名

                %l : 输出语句所在的行数, 包括类名、方法名、文件名、行数

                hostName : 本地机器名

                hostAddress : 本地ip地址

             -->

            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>

        </Console>

 

        <!--

            循环日志文件:日志文件大于阀值的时候,就开始写一个新的日志文件

            这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档

 

            fileName    : 指定当前日志文件的位置和文件名称

            filePattern : 指定当发生Rolling时,文件的转移和重命名规则

            SizeBasedTriggeringPolicy : 指定当文件体积大于size指定的值时,触发Rolling

            DefaultRolloverStrategy : 指定最多保存的文件个数

            TimeBasedTriggeringPolicy : 这个配置需要和filePattern结合使用

                注意filePattern中配置的文件重命名规则是${FILE_NAME}_%d{yyyy-MM-dd}_%i,最小的时间粒度是dd,即天,

                TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1天生成一个新文件

        -->

 

        <RollingRandomAccessFile name="INFO" fileName="logs/${FILE_NAME}.log" filePattern="log/${FILE_NAME}_%d{yyyy-MM-dd}_%i.log.gz">

            <Filters>

                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>

                <ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>

            </Filters>

            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy interval="1"/>

                <SizeBasedTriggeringPolicy size="1MB"/>

            </Policies>

            <DefaultRolloverStrategy max="20"/>

        </RollingRandomAccessFile>

 

        <!--错误信息记录-->

        <RollingRandomAccessFile name="ERROR" fileName="logs/${FILE_NAME}-ERROR.log" filePattern="log/${FILE_NAME}-ERROR_%d{yyyy-MM-dd}_%i.log.gz">

            <Filters>

                <ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>

                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>

            </Filters>

            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy interval="1"/>

                <SizeBasedTriggeringPolicy size="1MB"/>

            </Policies>

            <DefaultRolloverStrategy max="20"/>

        </RollingRandomAccessFile>

 

        <!--系统级别的错误信息-->

        <RollingRandomAccessFile name="FATAL" fileName="logs/${FILE_NAME}-FATAL.log" filePattern="log/${FILE_NAME}-FATAL%d{yyyy-MM-dd}_%i.log.gz">

            <Filters>

                <ThresholdFilter level="FATAL" onMatch="ACCEPT" onMismatch="DENY"/>

            </Filters>

            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy interval="1"/>

                <SizeBasedTriggeringPolicy size="1MB"/>

            </Policies>

            <DefaultRolloverStrategy max="20"/>

        </RollingRandomAccessFile>

 

        <!--全部日志信息:DEBUG及以上级别-->

        <RollingRandomAccessFile name="ALL" fileName="logs/${FILE_NAME}-ALL.log" filePattern="log/${FILE_NAME}-ALL%d{yyyy-MM-dd}_%i.log.gz">

            <Filters>

                <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>

            </Filters>

            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy interval="1"/>

                <SizeBasedTriggeringPolicy size="10MB"/>

            </Policies>

            <DefaultRolloverStrategy max="20"/>

        </RollingRandomAccessFile>

 

        <!--配置异步写日志-->

        <Async name="Async">

            <AppenderRef ref="ALL"/>

        </Async>

 

        <!--输出到MongoDB中-->

        <NoSql name="databaseAppender">

            <MongoDb databaseName="test" collectionName="errorlog" server="localhost" port="27017" />

        </NoSql>

    </Appenders>

 

    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->

    <Loggers>

        <!--监控系统信息-->

        <Logger name="org.springframework" level="info" additivity="false">

            <AppenderRef ref="Console"/>

        </Logger>

 

        <!--输出到NoSQL中-->

        <Logger name="mongoLog" level="trace" additivity="false">

            <AppenderRef ref="databaseAppender" />

        </Logger>

 

        <Root level="debug">

            <!-- 这儿为trace表示什么都可以打印出来了,其他几个级别分别为:TRACE、DEBUG、INFO、WARN、ERROR和FATAL -->

            <Appender-Ref ref="Console"/>

            <Appender-Ref ref="INFO"/>

            <Appender-Ref ref="ERROR"/>

            <Appender-Ref ref="FATAL"/>

        </Root>

    </Loggers>

 

</Configuration>

  相关解决方案