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

 更新时间:2023年12月18日 09:18:44   作者:晨曦蜗牛  
Log4J2是Apache Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,这篇文章主要介绍了Spring Boot 3中一套可以直接用于生产环境的Log4J2日志配置,需要的朋友可以参考下

一 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配置

    <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 的配置

# 控制台输出的字符集
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目录下。

<?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参数可以用KB、MB、GB等做后缀来指定具体的字节数,如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>

到此这篇关于Spring Boot 3中一套可以直接用于生产环境的Log4J2日志配置的文章就介绍到这了,更多相关Spring Boot 3 Log4J2日志配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java web激活邮箱并找回密码

    java web激活邮箱并找回密码

    这篇文章主要介绍了java web激活邮箱并找回密码,在项目中要实现用户注册的邮箱激活以及忘记密码重置密码功能,感兴趣的小伙伴们
    2015-11-11
  • java后端PayPal支付实现教程

    java后端PayPal支付实现教程

    本文主要介绍了java后端PayPal支付实现教程,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 利用Spring Session和redis对Session进行共享详解

    利用Spring Session和redis对Session进行共享详解

    这篇文章主要给大家介绍了关于利用Spring、Session和redis对Session进行共享的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • SpringBoot+Vue前后端分离实现请求api跨域问题

    SpringBoot+Vue前后端分离实现请求api跨域问题

    这篇文章主要介绍了SpringBoot+Vue前后端分离实现请求api跨域问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • SpringBoot3.x版本与Mybatis-Plus不兼容问题

    SpringBoot3.x版本与Mybatis-Plus不兼容问题

    当使用3.x版本的SpringBoot结合Mybatis-Plus时版本不兼容就会报错,本文就来介绍一下这个问题的解决方法,感兴趣的可以了解一下
    2024-03-03
  • Java 输入多行字符串或者多个int数值的方法

    Java 输入多行字符串或者多个int数值的方法

    今天小编就为大家分享一篇Java 输入多行字符串或者多个int数值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Spring注解@Configuration与@Bean注册组件的使用详解

    Spring注解@Configuration与@Bean注册组件的使用详解

    这篇文章主要介绍了SpringBoot中的注解@Configuration与@Bean注册组件的使用,具有很好的参考价值,希望对大家有所帮助
    2022-06-06
  • Hibernate一级缓存和二级缓存详解

    Hibernate一级缓存和二级缓存详解

    今天小编就为大家分享一篇关于Hibernate一级缓存和二级缓存详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 老程序员教你一天时间完成Java迷宫小游戏

    老程序员教你一天时间完成Java迷宫小游戏

    最近经常在机房看同学在玩一个走迷宫的游戏,比较有趣,自己也用java写一个实现随机生成迷宫的算法,其实就是一个图的深度优先遍历算法.
    2021-08-08
  • 关于java获取新浪天气示例

    关于java获取新浪天气示例

    这篇文章主要介绍了关于java获取新浪天气示例,新浪的接口可以直接通过城市名字查询天气所以这里使用新浪API,,需要的朋友可以参考下
    2023-04-04

最新评论