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

SpringBoot 项目中使用Log4j2详细(避坑) 等名称的文件,如果都没有找到,则会按默认配置输出,也就是输出到控制台,也可以对配置文件自定义位置(需要在web.xml中配置),一般放置在src/main/resources根目录下即可。是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、log2j配置文件可以是xml格式的,也可以是json格式的,尝试一些正常和错误的操作,以下为反馈的日志信息。springboot项目中需导入。 阅读详情

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>

springboot log4j2.yml 配置日志文件自动过期(只保留7天) 亲测可以! 线上出了一个奇怪的bug,上传文件部分请求出现500错误 同一个文件上传,部分请求会出现500错误,部分返回正确的图片地址。 环境:20台服务器的集群,Java jar程序 经过排查发现是磁盘满了,参考之前我的文章 如何排查磁盘100% 发现一个令人大吃一惊的事情,每台机器是40G硬盘,日志文件占了32G,-,- 至于为什么部分请求成功呢?因为20台还没有所有机器都满。 首先肯定是删除一波日志文件解决问题,发现info的日志有部分几天高达有2G的大小,这谁顶的住,应该是线上出了bug,然后疯狂打日志(内网环 阅读详情

相关推荐

SpringBoot系列之日志log4j2

 后台程序开发及上线时,一般都会用到Log信息打印及Log日志记录,开发时通过Log信息打印可以快速的定位问题所在,帮助我们快捷开发。程序上线后如遇到Bug或错误,此时则需要日志记录来查找发现问题所在。  Spring Boot 可以集成很多不同的日志系统,其中最常用的Apache Log4j,而Log4j 2Log4j的升级版本,Log4j 2相对于Log4j 1.x 有了很多显著的改善。所...

qq_34638225的博客 690

6. Spring Boot 2.x 最佳实践之 Apache Log4j2 集成

Spring Boot最佳实践之Apache Log4j 2集成,自定义线程日志

极客星云-CSDN博客 1946

IDEASpring Boot项目集成日志框架log4j2

附加:集成日志框架log4j2 1、向pom文件中添加如下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!--移除框架中的logback依赖--> &lt...

qq_58595750的博客 577

Log4j2 配置详解

前言 Log4j2Log4j继承而来,其中相应的组件也基本类似。Log4j包括三大组件Logger、Appender、Layout。 Logger:日志记录器,负责收集处理日志记录 (如何处理日志) Appender:日志输出目的地,负责日志的输出 (输出到什么 地方) Layout:日志格式化,负责对输出的日志格式化 (以什么形式展现) Log4j2 配置文件改变 ...

Be yourself. 2802

springboot项目使用log4j2,日志配置文件log4j2.xml使用说明及个人注意点总结

springboot项目使用log4j2,日志配置文件log4j2.xml使用说明及个人注意点总结

刘大猫 7572

Springboot配置log4j2配置文件log4j2.xml详解

最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方案)以及log4j2配置文件的详解,就需要我们来好好聊一聊了。本文就专门来讲解下log4j2.xml配置文件的各项标签的意义。 一、Springboot依赖 (1)剔除spring web包含的依赖 <dependency> <groupId>org.springframework.boo

蓝天⊙白云的博客 9151

IDEA Springboot整合log4j2

springboot整合log4j2全过程

qq_42617840的博客 1004

springboot集成log4j2

springboot集成log4j2日志

qq_41720976的博客 2024

log4j2使用log4j2.xml分析

我们使用slf4j + log4j2作为项目的日志组合 pom <!-- slf4j核心包--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.13</version> &lt

雪落南城的博客 2724

springboot 集成Log4j2

一、Log4j2的介绍 Log4j是Apache下的一开源项目,通过使用Log4j可以将日志信息打印到控制台、文件等。我们也可以控制每一条日志的输出格式,通过定义每一条日志信息的级别能够更加细致地控制日志的生成过程。 在应用程序中添加日志记录有三个目的: 1、监视代码中变量的变化,周期性地记录到文件中,供其他应用进行统计分析 2、跟踪代码运行时的轨迹,作为日后审计的依据 3、担当集成开发...

GSON的博客 2617

Springboot集成Log4j进行日志分类管理

Springboot集成Log4j进行日志分类管理 在开发测试阶段我们的日志在控制台输出,问题排查看一下日志也没什么关系,但在生产环境我们需要将日志进行分类归档处理,Spring为我们提供了一个好用工具log4j,在springboot下快速集成log4j 具体实现 由于springboot里已经依赖了spring-boot-starter-logging包,所以我们需要将该jar包排除掉,引入s...

weixin_43314604的博客 1017

Spring Boot项目里,你的log4j2.xml配置文件真的生效了吗?排查指南来了

本文深入探讨了Spring Boot项目中log4j2.xml配置文件不生效的常见问题及解决方案。从依赖冲突、配置文件位置到配置优先级,提供了详细的排查指南和最佳实践,帮助开发者快速定位并解决log4j2配置问题。

weixin_28717431的博客 162

springboot和apache logger日志框架详解(内含log4j2-spring.xml配置)

https://cloud.tencent.com/developer/article/1435719 https://blog.csdn.net/flysun3344/article/details/80555746 在pom.xml做配置即可使用 org.springframework.boot spring-boot-starter-logging

murenyangdaren的博客 440

log4j2使用

log4j2使用

lixuanhong的博客 768

关于spring boot项目的日志配置

关于spring boot项目的日志配置 新搭建项目,过去一直都是复制的别人的日志配置文件。心想自己也该了解了解这个了。然后百度一波,大家都是log4j2都很强大 开始百度怎么集成,不出所料全是复制粘贴党。还各种复杂的xml配置。开始愚蠢的研究别人的xml配置。 突然醒悟去spring官网找配置: https://docs.spring.io/spring-boot/docs/2.5.2/reference/htmlsingle/#features.logging. 发现关于log4j2的配

qq_37809967的博客 243

Spring Boot2集成Log4j2

1、关键依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boo

Strange_boy的博客 339

Spring Boot 多环境与日志配置

Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。SLF4J —— Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。

wno704的博客 516

Spring Boot项目里,你的log4j2.xml配置文件真的生效了吗?排查与配置全攻略

本文深入探讨了Spring Boot项目中log4j2.xml配置文件不生效的常见问题及解决方案。从依赖冲突、配置文件位置、热加载失效到日志级别覆盖,提供了全面的排查指南和最佳实践配置模板,帮助开发者高效集成Log4j2并优化日志管理。

weixin_26985923的博客 200
上一篇: Spring Boot 获取正在运行的服务端口
下一篇: Centos7.6 使用scp指令远程传输文件
ShimeaFan
博客等级 码龄6年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值