美文网首页SpringHomejavasporingboot
完美spring boot 使用log4j2按级别输出到不同文件

完美spring boot 使用log4j2按级别输出到不同文件

作者: lcjyzm | 来源:发表于2018-07-13 17:42 被阅读234次

    1. pom.xml引入需要的jar

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <!--排除默认的日志框架-->
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!--log4j2 日志框架-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j2</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    

    2. 编写log4j2配置文件(注意看注释)

    <?xml version="1.0" encoding="UTF-8"?>
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
    <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
    <Configuration status="WARN" monitorInterval="30">
        <!--全局属性-->
        <Properties>
            <Property name="APP_NAME">luis-log4j2</Property>
            <Property name="LOG_FILE_PATH">${sys:user.home}/logs/${APP_NAME}</Property>
            <Property name="PATTERN_FORMAT">%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n</Property>
        </Properties>
    
        <Appenders>
            <!--输出到控制台-->
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="${PATTERN_FORMAT}"/>
            </Console>
    
    
            <!--输出到文件 用来定义超过指定大小自动删除旧的创建新的的Appender.-->
            <RollingFile name="RollingInfoFile" fileName="${LOG_FILE_PATH}/info.log"
                         filePattern="${LOG_FILE_PATH}/$${date:yyyyMM}/info-%d{yyyyMMdd}-%i.log.gz">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <Filters>
                    <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                    <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>
    
                <PatternLayout>
                    <pattern>${PATTERN_FORMAT}</pattern>
                </PatternLayout>
    
                <Policies>
                    <!-- rollover on startup, daily and when the file reaches 10 MegaBytes -->
                    <OnStartupTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                    <TimeBasedTriggeringPolicy/>
                </Policies>
            </RollingFile>
    
            <!--输出警告日志到文件-->
            <RollingFile name="RollingWarnFile" fileName="${LOG_FILE_PATH}/warn.log"
                         filePattern="${LOG_FILE_PATH}/$${date:yyyyMM}/warn-%d{yyyyMMdd}-%i.log.gz">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <Filters>
                    <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                    <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>
    
                <PatternLayout>
                    <pattern>${PATTERN_FORMAT}</pattern>
                </PatternLayout>
    
                <Policies>
                    <!-- rollover on startup, daily and when the file reaches 10 MegaBytes -->
                    <OnStartupTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                    <TimeBasedTriggeringPolicy/>
                </Policies>
            </RollingFile>
    
            <!--输出错误日志到文件-->
            <RollingFile name="RollingErrorFile" fileName="${LOG_FILE_PATH}/error.log"
                         filePattern="${LOG_FILE_PATH}/$${date:yyyyMM}/error-%d{yyyyMMdd}-%i.log.gz">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    
                <PatternLayout>
                    <pattern>${PATTERN_FORMAT}</pattern>
                </PatternLayout>
    
                <Policies>
                    <!-- rollover on startup, daily and when the file reaches 10 MegaBytes -->
                    <OnStartupTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                    <TimeBasedTriggeringPolicy/>
                </Policies>
            </RollingFile>
        </Appenders>
    
        <Loggers>
    
            <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
            <Logger name="org.springframework" level="INFO"/>
            <Logger name="org.mybatis" level="INFO"/>
    
            <!-- LOG "com.luis*" at TRACE level -->
            <Logger name="com.luis" level="INFO"/>
    
            <!-- LOG everything at INFO level -->
            <Root level="ALL">
                <AppenderRef ref="Console"/>
                <AppenderRef ref="RollingInfoFile"/>
                <AppenderRef ref="RollingWarnFile"/>
                <AppenderRef ref="RollingErrorFile"/>
            </Root>
        </Loggers>
    
    </Configuration>
    
    注意:按日志级别输出到不同的文件,需要使用Filters,并且先拒绝不符合的,在接受符合的顺序;
    

    3. 编写测试类

    @Log4j2
    @RestController
    public class LombokLogController {
    
        @GetMapping("lombokLog")
        public String lombokLog(){
            log.trace("lombok info log!");
            log.debug("lombok debug log!");
            log.info("lombok info log!");
            log.warn("lombok warn log!");
            log.error("lombok error log!");
            log.fatal("lombok fatal log!");
            return "use lombok log!";
        }
    }
    

    4. 查看结果

    生成日志目录
    info级别
    warn级别
    error级别

    相关文章

      网友评论

        本文标题:完美spring boot 使用log4j2按级别输出到不同文件

        本文链接:https://www.haomeiwen.com/subject/yajspftx.html