LOG4J2指定不同类型的日志输出到不同的文件

在项目中,可能会产生非常多的日志记录,为了方便日志分析,一般可以将日志按级别输出到指定文件,本次就先说说log4j2的实现吧。

我们配置的Appender默认情况下是可以输出任何类型的日志的,只要某个Logger引用了Appender,那么这个Logger中输出的任何日志信息都能输出到该Appender中,当前了Logger中是可以设置日志级别的,高于设置的级别才能输出,但是也不能达到我们想要的效果,如果我们想要error日志输出到error文件之中,warn日志输出到warn文件中,那么Logger很明显不能做到,Logger只能限制日志的底线,不能限制日志的上限。我们如果要限制上限,就需要用到Appender中的过滤器了。

 

package com.jessezeng.log4j2.test;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Test {
    
    private static  Logger log=LogManager.getLogger(Test.class);
    public static void main(String[] args) {
          log.info("info test...................");
          log.error("error test...................");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF -->
<configuration status="OFF">
    <!-- 定义下面的引用名 -->
    <Properties>
        <property name="log_pattern"> %d %-5p [%c] %m%n</property> 
        <property name="basePath">/logs</property>

        <property name="common-msg">${basePath}/common.log</property>
        <property name="rollingfile_common-msg">${basePath}/common%d{yyyy-MM-dd}.log</property>

        <property name="error-msg">${basePath}/error.log</property>
        <property name="rollingfile_error-msg">${basePath}/error%d{yyyy-MM-dd}.log</property>

    </Properties>
    <!--先定义所有的appender -->
    <appenders>
        <!--输出控制台的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
            <!--输出日志的格式 -->
            <PatternLayout pattern="${log_pattern}" />
        </Console>

        <!--打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <!-- 按月生成归档日志,可以使用 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log" -->
        <RollingFile name="rollingfile_common-msg"
            filename="${common-msg}" filePattern="${rollingfile_common-msg}"
            append="true">
            <Filters>
                // 设置Appender日志的上限
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                // 设置Appender日志的底线,最终就能使该文件中只输出info日志了
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
             </Filters>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

        <RollingFile name="rollingfile_error-msg"
            filename="${error-msg}" filePattern="${rollingfile_error-msg}"
            append="true">
             <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %class{36} %L %M - %msg%xEx%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <AsyncLogger name="net.shgaoxin.log4j2test" level="info" additivity="false"  includeLocation="true">
            <AppenderRef ref="rollingfile_common-msg"  />
            <AppenderRef ref="rollingfile_error-msg" />
        </AsyncLogger>
    </loggers>
</configuration>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值