Spring boot 集成log4j2---使用xml配置文件

本文介绍了如何在Spring Boot项目中集成Log4j2,首先需要在pom.xml中移除默认日志框架并引入Log4j2依赖。接着通过XML配置文件设置日志,Spring Boot会默认加载classpath下的log4j2.xml。内容包括日志级别如info、error、warn的记录,并配置了日志按日期和大小进行备份及自动删除的策略。

log4j2

一.maven引入log4j2

注意 要先去掉spring boot默认日志框架.在pom文件中去除.

        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- 去掉SpingBoot默认的日志系统:LogBack,集成在spring-boot-starter-logging -->
			<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>

二.通过xml文件,配置log4j2日志

spring boot 默认加载classpath 下名称为log4j2.xml的log4j2配置文件.即resources目录下

也可以通过 application.yml配置文件指定 

 

在类中使用:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.*;



/**
 * @author shf
 * @date 2021/10/13
 */
@RestController
@RequestMapping("test")
public class TestController {

    private static final Logger logger= LogManager.getLogger(TestController.class);



    @PostMapping("/send2")
    public void sendJSON(@RequestBody String input) {

        logger.trace("trace test:{}",input);
        logger.info("info test:{}",input);
        logger.debug("debug test:{}",input);
        logger.warn("warn test:{}",input);

    }
}

三.log4j2.xml配置

<Properties> 标签下 定义一些局部变量 

<Appenders>标签下 配置日志相关信息包括控制台信息,备份日志信息

<RollingFile>标签配置输出日志相关内容

<Console>标签中的 如果遇到控制字体样式问题,可以通过 设置disableAnsi="false" 解决

log4j2.xml示例:

info error warn日志每天根据时间和日志文件大小单独备份存储,并且设置定期自动删除.

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

<configuration status="WARN">
    <Properties>
        <Property name="logFilePath">log</Property>
        <Property name="logFileName">project-log4j2</Property>
        <Property name="backupPath">${logFilePath}/%d{yyyy-MM-dd}</Property>
        <!--当前精确的分钟,可根据情况自行配置-->
        <Property name="backupHZ">%d{yyyy-MM-dd-HH-mm}</Property>
        <!--日志文件中的日志打印格式-->
        <Property name="logFormat">[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t %c[%L] - %m %n</Property>
    </Properties>

    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <!--disableAnsi="false" 如果不设置为false,在windows系统下,console日志颜色的配置不会生效-->
            <PatternLayout disableAnsi="false">
                <!--%style{%d}{Underline,black},设置时间格式,及颜色样式-->
                <!--%style{[%t]}{Underline,FG_White},设置线程,及颜色样式-->
                <!--%highlight{%-5level:}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=Bright Cyan, TRACE=Bright Blue},设置日志LEVEL,及颜色样式-->
                <!--%style{%msg(%L)}{Default},设置方法名,及颜色样式-->
                <!--%throwable,异常 相关-->
                <pattern>%style{%d}{Underline,black} %style{[%t]}{Underline,FG_White} | %style{%c{1.}}{Underline,FG_Cyan} | %style{%M}{Underline,Black} | %highlight{%-5level:}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=Bright Cyan, TRACE=Bright Blue} %style{%msg(%L)}{Default} %throwable %n</pattern>
            </PatternLayout>
        </Console>

        <!--INFO日志收集-->
        <RollingFile name="infoLog" fileName="${logFilePath}/${logFileName}-infoLog.log"
                     filePattern="${backupPath}/info/${logFileName}-infoLog-${backupHZ}-%i.log">
            <!--日志文件中的日志格式-->
            <PatternLayout pattern="${logFormat}"/>

            <Policies>
                <!--根据时间备份,interval表示间隔时间, 需结合${backupPath}中的时间,当前精确到分钟,所以就是按1分钟间隔. 可单独使用-->
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                <!--根据日志文件大小配置,size为当前日志文件大小.可单独使用-->
                <SizeBasedTriggeringPolicy size="2MB"/>
            </Policies>

<!--            <DefaultRolloverStrategy max="15">-->
            <!--设置日志定时删除-->
            <DefaultRolloverStrategy>
                <!--扫描的日志文件路径,maxDepth为文件层级-->
                <Delete basePath="${logFilePath}/" maxDepth="3">
                    <!--默认规则,只能删除文件,不能删除文件夹,如果需要删除文件夹需 添加ScriptCondition节点,再添加Script子节点,这样删除什么完全由脚本决定 . 可参考官网 http://logging.apache.org/log4j/2.x/manual/appenders.html#ScriptCondition-->
                    <IfFileName glob="*/info/${logFileName}-infoLog-*.log"/>
                    <!--日志保存期限 age的单位:D、H、M、S,分别表示天、小时、分钟、秒-->
                    <IfLastModified age="2D" />
                </Delete>
            </DefaultRolloverStrategy>

            <!--过滤器 只打印INFO日志-->
            <Filters>
                <ThresholdFilter level="WARN" onMatch="DENY" onMisMatch="NEUTRAL"/>
                <ThresholdFilter Level="INFO" onMatch="ACCEPT" onMisMatch="DENY"/>
            </Filters>

        </RollingFile>

        <!--WARN日志收集-->
        <RollingFile name="warnLog" fileName="${logFilePath}/${logFileName}-warnLog.log"
                     filePattern="${backupPath}/warn/${logFileName}-warnLog-${backupHZ}-%i.log">

            <PatternLayout pattern="${logFormat}"/>

            <Policies>
                <!--                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>-->
                <SizeBasedTriggeringPolicy size="1MB"/>
            </Policies>

            <!--            <DefaultRolloverStrategy max="15">-->
            <DefaultRolloverStrategy>
<!--                <Delete basePath="${backupPath}/warn/" maxDepth="1">-->
                <Delete basePath="${logFilePath}/" maxDepth="3">
                    <!--                    <IfFileName glob="${logFilePath}-info*.log.gz"/>-->
                    <IfFileName glob="*/warn/${logFileName}-warnLog-*.log"/>
<!--                    <IfLastModified age="60m" />-->
                    <IfLastModified age="3D" />
                </Delete>
            </DefaultRolloverStrategy>

            <!--过滤器 只打印WARN日志-->
<!--            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>-->
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMisMatch="NEUTRAL"/>
                <ThresholdFilter Level="WARN" onMatch="ACCEPT" onMisMatch="DENY"/>
            </Filters>

        </RollingFile>

        <!--ERROR 日志收集-->
        <RollingFile name="errorLog" fileName="${logFilePath}/${logFileName}-errorLog.log"
                     filePattern="${backupPath}/error/${logFileName}-errorLog-${backupHZ}-%i.log">

            <PatternLayout pattern="${logFormat}"/>

            <Policies>
                <!--                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>-->
                <SizeBasedTriggeringPolicy size="2MB"/>
            </Policies>


            <DefaultRolloverStrategy>
<!--                <Delete basePath="${backupPath}/error/" maxDepth="1">-->
                <Delete basePath="${logFilePath}/" maxDepth="3">
                    <!--                    <IfFileName glob="${logFilePath}-info*.log.gz"/>-->
                    <IfFileName glob="*/error/${logFileName}-errorLog-*.log"/>
<!--                    <IfLastModified age="60m" />-->
                    <IfLastModified age="3D" />
                </Delete>
            </DefaultRolloverStrategy>

            <!--过滤器 只打印WARN日志-->
           <ThresholdFilter Level="ERROR"  onMatch="ACCEPT" onMismatch="DENY"/>

        </RollingFile>

    </Appenders>

    <Loggers>
        <root level="info">
            <AppenderRef ref="CONSOLE"/>
            <AppenderRef ref="infoLog"/>
            <AppenderRef ref="warnLog"/>
            <AppenderRef ref="errorLog"/>
<!--            <AppenderRef ref="RollingTimeFile"/>-->
        </root>
    </Loggers>
</configuration>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值