springboot log4j2 同步&异步使用 log4j2.xml配置

本文详细介绍了如何在Spring Boot中排除默认的日志框架并引入Log4j2,通过XML配置文件设置了日志级别、全局变量、Appenders(包括控制台输出和文件归档)、过滤器、日志格式、归档策略和AsyncLogger异步日志。还通过并发测试展示了不同配置下日志丢失的问题。

依赖

需要排除掉springboot自带的logback和logging的starter

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <exclusions>
         <exclusion>
             <artifactId>spring-boot-starter-logging</artifactId>
             <groupId>org.springframework.boot</groupId>
         </exclusion>
         <exclusion>
             <!--log4j-slf4j-impl与 logback-classic包不兼容,删除这个包 -->
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
         </exclusion>
     </exclusions>
 </dependency>
        
 <dependency> <!-- 引入log4j2依赖 -->
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-log4j2</artifactId>
 </dependency>

 <dependency> <!-- 异步依赖 -->
     <groupId>com.lmax</groupId>
     <artifactId>disruptor</artifactId>
     <version>3.4.4</version>
 </dependency>

XML配置

在resources下创建log4j2.xml

XML大致标签架构(表达的比较直白)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"   monitorInterval="5">
    <Properties>
	全局变量		
    </Properties>

    <Appenders>
        <console >项目控制台设置</console>
        <RollingRandomAccessFile  >可归档的日志设置(推荐)</RollingRandomAccessFile >
        <RollingFile >可归档的日志设置</RollingFile>
    </Appenders>
    <Loggers>
      
        <Logger >部分日志设置</Logger>

        <AsyncLogger >异步日志</AsyncLogger>
        <Root >
            <AppenderRef />全局日志
        </Root>
    </Loggers>
</Configuration>

Configuration

level日志级别: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

 <Configuration status="WARN" status="info"  monitorInterval="5">

monitorInterval:xx秒 当xml变化时无需重启,热更新设置
status:Log4j2内部日志的输出级别

Properties 全局变量配置

全局变量配置 ${sys:catalina.home}为tomcat部署路径,例如:/data/tomcat。

<Properties>
        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
        <!--
            %[format]conversion{
   
   param}
            % 必须,起始符号。
            [format] 可选,部分conversion需要,用于指定输出宽度,对齐方式等
            conversion 必须,转换符号
            param 可选,部分转换符号需要指定参数,如日期格式等
            例如:
            %d{
   
   yyyy-MM-dd HH:mm:ss} 打印当前时间
            %thread表示线程名
            %-5level 打印日记级别,并且占5个字符宽度
            %class{
   
   36} class路径
            %M 打印方法名称
            %logger{
   
   360} 表示 Logger 名字最长36个字符
        -->
        <property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{360} - %msg%n" />
        <!-- 定义日志存储的路径,不要配置相对路径 -->
        <property name="FILE_PATH" value="/logs" />
        <property name="FILE_NAME" value="myApp" />
    </Properties>

Appenders 日志定义

定义日志输出目的地,内容和格式等

console 控制台输出

        <!--控制台输出日志的格式 target:SYSTEM_OUT 或 SYSTEM_ERR===============================-->
        <console name="Console" target="SYSTEM_OUT">
            <!--PatternLayout:输出格式,不设置默认为:%m%n.-->
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="OFF" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>

File 自定义所有log信息

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用====-->
                <File name="Filelog" fileName="${FILE_PATH}/application.log" append="false">
                    <PatternLayout pattern="${LOG_PATTERN}"/>
                </File>

RollingRandomAccessFile

输出日志配置

  • name:Appender名称在标签内引用
  • immediateFlush:log4j2接收到日志事件时,是否立即将日志刷到磁盘。默认为true。
  • fileName:日志存储路径
  • filePattern:历史日志封存路径。其中%d{yyyyMMddHH}表示了日志的时间单位,log4j2自动识别zip等后缀,表示历史日志需要压缩。
  • immediateFlush:磁盘刷新方式 设置为false效率很高,但是日志存储会丢失亲测1w数据丢失3000+
<Ro
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值