slf4j+log4j2日志分级输出

SLF4J+LOG4J2 日志分级输出

依赖

<!-- slf4j + log4j2 begin -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.32</version>
        </dependency>
        <!-- 桥接:告诉Slf4j使用Log4j2 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.14.1</version>
        </dependency>
        <!-- 桥接:告诉commons logging使用Log4j2 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jcl</artifactId>
            <version>2.14.1</version>
        </dependency>
        <!-- 使用Log4j2 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.14.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.14.1</version>
        </dependency>
        <!--异步日志输出-->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.4.2</version>
        </dependency>

分级输出

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--status="WARN" :用于设置log4j2自身内部日志的信息输出级别,默认是OFF-->
<!--monitorInterval="30"  :间隔秒数,自动检测配置文件的变更和重新配置本身-->
<configuration status="WARN" monitorInterval="30">
    <Properties>
        <!--自定义一些常量,之后使用${变量名}引用-->
        <Property name="logFilePath">F://logs</Property>
        <Property name="logFileName">allLogs.log</Property>
        <Property name="Pattern">[%d{HH:mm:ss.SSS}] [%-5level] [类:%class{36}] [行数:%L] [方法:%M] -[错误信息:%msg]%n</Property>
    </Properties>
    <!--appenders:定义输出内容,输出格式,输出方式,日志保存策略等,常用其下三种标签[console,File,RollingFile]-->
    <appenders>
        <!--console :控制台输出的配置-->
        <console name="Console" target="SYSTEM_OUT">
            <!--PatternLayout :输出日志的格式,LOG4J2定义了输出代码,详见第二部分-->
            <PatternLayout pattern="${Pattern}"/>
            <Filters>
                <!--如果是INFO级别拒绝-->
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                <!--如果是DEBUG输出-->
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </console>

        <!--File :同步输出日志到本地文件-->
        <!--append="false" :根据其下日志策略,每次清空文件重新输入日志,可用于测试-->
        <RandomAccessFile name="accessFile" fileName="${logFilePath}/${logFileName}" append="true">
            <PatternLayout pattern="${Pattern}"/>
        </RandomAccessFile>

        <!-- ${sys:user.home} :项目路径  也用不了 -->
        <!--RollingFile以Info输出-->
        <RollingFile name="RollingFileInfo" fileName="${logFilePath}/INFO/info.log"
                     filePattern="${logFilePath}/INFO/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"
                     append="true">
            <!--ThresholdFilter :日志输出过滤-->
            <!--level="info" :日志级别,onMatch="ACCEPT" :级别在info之上则接受,onMismatch="DENY" :级别在info之下则拒绝-->
            <Filters>
                <!--如果是warn级别拒绝-->
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <!--如果是info输出-->
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="${Pattern}"/>
            <!-- Policies :日志滚动策略-->
            <Policies>
                <!-- TimeBasedTriggeringPolicy :时间滚动策略,默认0点小时产生新的文件,interval="6" : 自定义文件滚动时间间隔,每隔6小时产生新文件, modulate="true" : 产生文件是否以0点偏移时间,即6点,12点,18点,0点-->
                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                <!-- SizeBasedTriggeringPolicy :文件大小滚动策略-->
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="25"/>
        </RollingFile>

        <!--RollingFile以warn输出-->
        <RollingFile name="RollingFileWarn" fileName="${logFilePath}/WARN/warn.log"
                     filePattern="${logFilePath}/WARN/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"
                     append="true">
            <Filters>
                <!--如果是error级别拒绝-->
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <!--如果是warn输出-->
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="${Pattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="25"/>
        </RollingFile>

        <!--RollingFile以error输出-->
        <RollingFile name="RollingFileError" fileName="${logFilePath}/ERROR/error.log"
                     filePattern="${logFilePath}/ERROR/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"
                     append="true">
            <Filters>
                <!--如果是FATAL级别拒绝-->
                <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>
                <!--如果是error输出-->
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="${Pattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="25"/>
        </RollingFile>

        <!--RollingFile以debug输出-->
        <RollingFile name="RollingFileDebug" fileName="${logFilePath}/DEBUG/debug.log"
                     filePattern="${logFilePath}/DEBUG/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"
                     append="true">
            <Filters>
                <!--如果是INFO级别拒绝-->
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                <!--如果是DEBUG输出-->
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="${Pattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="25"/>
        </RollingFile>

    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <!--Logger节点用来单独指定日志的形式,name为包路径,比如要为org.springframework包下所有日志指定为INFO级别等。 -->
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
        <root level="debug">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
            <appender-ref ref="RollingFileDebug"/>
            <appender-ref ref="accessFile"/>
        </root>
        <!--???????用不了??????-->
        <!--AsyncLogger :异步日志,LOG4J有三种日志模式,全异步日志,混合模式,同步日志,性能从高到底,线程越多效率越高,也可以避免日志卡死线程情况发生-->
        <!--additivity="false" : additivity设置事件是否在root logger输出,为了避免重复输出,可以在Logger 标签下设置additivity为”false”-->
        <AsyncLogger name="AsyncLogger" level="debug" includeLocation="true" additivity="false">
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
            <appender-ref ref="RollingFileDebug"/>
            <appender-ref ref="accessFile"/>
        </AsyncLogger>
    </loggers>
</configuration>

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值