Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Boot 3中一套可以直接用于生产环境的Log4J2日志配置

Spring Boot 3中一套可以直接用于生产环境的Log4J2日志配置

作者头像
耕耘实录
发布于 2023-12-18 03:56:38
发布于 2023-12-18 03:56:38
2.7K00
代码可运行
举报
文章被收录于专栏:耕耘实录耕耘实录
运行总次数:0
代码可运行
文章目录

  • 一 Log4J2 相关概念及基本特点
  • Spring Boot3 中启用Log4J2的pom.xml配置
  • 三 application.properties 的配置
  • 四 完整配置

一 Log4J2 相关概念及基本特点

Log4J2是Apache Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。 Logger:日志记录器,用于标识日志的来源。常见的有两种:Root和Logger。Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 Appender:日志输出器,用于将日志记录输出到指定的目标。常见的有三种子节点:Console、RollingFile、File。Console节点用来定义输出到控制台的Appender;RollingFile节点用来定义超过指定条件自动删除旧的创建新的Appender;File节点用来定义输出到指定位置的文件的Appender。 Layout:日志格式化器,用于定义日志记录的输出格式。Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出。

二 Spring Boot3 中启用Log4J2的pom.xml配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <dependencies>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

排除原依赖中的日志相关包,单独引入Log4J2依赖。

三 application.properties 的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 控制台输出的字符集
logging.charset.console=UTF-8
# 日志写入文件的字符集
logging.charset.file=UTF-8
# Log4J2自定义配置的路径,放置到resources目录下
logging.config=classpath:logback.xml
# 应用程序包的路径
logging.level.com.test=INFO
# 日志存放路径
logging.file.path=logs/test.log

四 完整配置

配置文件的名称为:logback.xml,放置于resources目录下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml
 version="1.0" encoding="UTF-8"?>
 <!--status:用来指定log4j2本身的打印日志的级别,monitorinterval:用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s-->
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="logDir">logs</Property>
        <Property name="logFile">cmams</Property>
        <Property name="level">DEBUG</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-4level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %logger{96}:%line - %msg%n"/>
            <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
        </Console>
        <RollingFile name="File" fileName="${logDir}/${logFile}.log"
                     filePattern="${logDir}/${logFile}-%d{yyyy-MM-dd}-%i.log.gz">
            <!--日志输出格式-->
            <PatternLayout pattern="[%-4level] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %logger{96}:%line - %msg%n"/>
            <!--满足任何一个policy即进行归档-->
            <Policies>
                <!--当前日志与开始日期不匹配(RollingFile中配置的filePattern中配置的最小时间单位不匹配时)时进行归档-->
                <TimeBasedTriggeringPolicy/>
                <!--文件超过512M进行归档,SizeBasedTriggeringPolicy规定了当日志文件达到了指定的size时,触发rollover操作。size参数可以用KBMBGB等做后缀来指定具体的字节数,如20MB-->
                <SizeBasedTriggeringPolicy size="64MB"/>
            </Policies>
            <!--归档的文件最大数量,max参数指定了计数器的最大值。一旦计数器达到了最大值,过旧的文件将被删除。-->
            <DefaultRolloverStrategy max="20">
                <!--删除规则-->
                <Delete basePath="${logDir}" maxDepth="2">
                    <!--匹配文件规则-->
                    <IfFileName glob="*.log.gz">
                        <IfLastModified age="60d">
                            <IfAny>
                                <!--logDir下文件总大小超过5GB,进行删除-->
                                <IfAccumulatedFileSize exceeds="5GB"/>
                                <!--logDir下文件总数量超过100,进行删除-->
                                <IfAccumulatedFileCount exceeds="100"/>
                            </IfAny>
                        </IfLastModified>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>
    <Loggers>
    <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
        <Logger name="com.cxwn.cmams" level="${level}" additivity="false">
            <AppenderRef ref="File"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="org.springframework" level="ERROR" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Logger>
        <Root level="WARN">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java日志框架学习--LogBack和Log4j2--下
Logback当前分成三个模块:logback-core,logback- classic和logback-access。
大忽悠爱学习
2022/05/17
1.2K0
Java日志框架学习--LogBack和Log4j2--下
带你深入Java Log框架,彻底搞懂Log4J、Log4J2、LogBack,SLF4J
使用过Log4J和LogBack的同学肯定能发现,这两个框架的设计理念极为相似,使用方法也如出一辙。其实这个两个框架的作者都是一个人,Ceki Gülcü,俄罗斯程序员。
码老思
2023/10/19
4.3K0
带你深入Java Log框架,彻底搞懂Log4J、Log4J2、LogBack,SLF4J
SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印
日志打印是了解Web项目运行的最直接方式,所以在项目开发中是需要首先搭建好的环境。
知了一笑
2019/07/19
2.3K1
SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印
快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)
JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框架使用方便,学习简单,能够在小型应用中灵活使用。
ha_lydms
2023/08/09
1.4K0
快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)
Springboot整合log4j2日志全解
上述介绍的是一些日志框架的实现,这里我们需要用日志门面来解决系统与日志实现框架的耦合性。SLF4J,即简单日志门面(Simple Logging Facade for Java),它不是一个真正的日志实现,而是一个抽象层( abstraction layer),它允许你在后台使用任意一个日志实现。
用户1212940
2020/07/10
5.7K0
Springboot整合log4j2日志全解
springboot项目集成log4j2
在开发环境中你可以不太注重日志,但是在生产环境中必须的收集好日志 开发环境下出现了问题你可以随意的debug,但是在生产环境下不可能停掉服务器来处理bug,有效的方法就是分析日志
许喜朝
2021/03/22
5590
Spring Boot 日志配置
默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了。
Dream城堡
2018/09/10
1.1K0
Springboot 2.x 使用 Log4j2 异步打印日志
目前常用的 Java 日志框架有 Log4j、Logback、Log4j2 ,性能方面推荐使用异步的 Log4j2,具体对比不多做分析,前人早已完成耕荒,我们就站在巨人的肩膀上来看看如何实操。
charmsongo
2020/12/31
2.3K0
Springboot 2.x 使用 Log4j2 异步打印日志
使用 Log4j2 + SLF4j 打造日志系统的全方位教程
java 界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,许多应用程序的日志部分都交给了 log4j,不过作为组件开发者,他们希望自己的组件不要紧紧依赖某一个工具,毕竟在同一个时候还有很多其他很多日志工具,假如一个应用程序用到了两个组件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了。
洋仔聊编程
2020/08/03
2.1K0
springboot06、log4j2日志配置
springboot06、log4j2日志配置 目录 前言: 1、pom配置 2、log4j2-spring.xml配置文件 3、在application.properties中引入log4j2的配置 4、log4j使用 ---- 前言: 日志接口(slf4j) slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback)。 接口用于定制规范,可以有多个实现,使用时是面向接口的(导入的包
红目香薰
2022/11/30
3790
springboot06、log4j2日志配置
spring整合log4j_log4j2异步日志配置
log4j、log4j2(log4j的升级版,最常用的)、logback(spring boot默认)、Jboss-logging…等
全栈程序员站长
2022/09/22
4260
Log4j 漏洞修复和临时补救方法
在这里面我们可以看到使用${}可以实现漏洞的注入,假设username为用户登录的输入框,即可从这个输入框进行注入,既可查看到一些后台系统信息,如果有黑客在使用JNDI编写恶意代码注入的话,后果是非常严重的。
FHAdmin
2021/12/14
1.2K0
使用Spring Boot和Log4j2进行高效日志管理:配置详解
🏆本文收录于 《Spring Boot从入门到精通》 ,专门攻坚指数提升,2023 年国内最系统+最强。
bug菌
2023/09/22
3K0
使用Spring Boot和Log4j2进行高效日志管理:配置详解
Spring Boot 2 集成log4j2日志框架
Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题。而且日志处理中我们会用到kafka作为日志管道。而kafka客户端依赖与Logback的兼容不是很完美,你可以选择排除依赖冲突或者使用Log4j2 。
码农小胖哥
2019/12/05
7850
第十一节:Springboot整合log4j2日志
SpringBoot默认使用的是logback, 但是还有一个性能更高的日志实现框架log4j2. 为什么选用log4j2 相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生; 下面是来自网络上一张性能对比图片 [img] 同步日志模式下, Logback的性能是最糟糕的,log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的 log4j2性能高的主要原因是它用了一个LMAX无
入门笔记
2022/02/14
3140
第十一节:Springboot整合log4j2日志
springboot整合篇-springboot整合log4j2
log4j2设计之初是为了审计,log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。
Java开发者之家
2021/06/17
6510
spring引入log4j2日志框架
Log4j2是Apache的一个开源项目,通过使用Log4j2,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
逍遥壮士
2020/09/18
1.7K0
spring引入log4j2日志框架
Springboot整合log4j2(按级别拆分)
创建log4j2.xml文件,放在工程resources目录里。这样就可以不加任何配置。如果你需要指定配置文件需要在Spring boot 配置文件application.yml中指定 logging.config 属性。
鱼找水需要时间
2023/02/16
7120
Springboot整合log4j2(按级别拆分)
Log4j2,性能无敌,横扫对手
来源:https://juejin.cn/post/6945753017878577165
用户1516716
2021/10/12
5670
忽视日志吃大亏,手把手教你玩转 SpringBoot 日志
对于刚学习编程的同学,很多人都对日志满不在乎,我们在做code review的时候,经常发现一些新同学喜欢一个方法写得很长,然后中间的注释和日志都少的可怜。
程序员大彬
2023/11/03
4.1K1
忽视日志吃大亏,手把手教你玩转 SpringBoot 日志
相关推荐
Java日志框架学习--LogBack和Log4j2--下
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验