spring boot 集成log4j2,设置日志输出案例

1、spring boot2.x需要先排除本身自带的logback
 

       <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>

2、引入MAVEN依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

 3、在spring boot 项目的resources文件下创建log4j2.xml,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <!-- 定义日志的输出方式和格式 -->
    <Appenders>
        <!-- RollingFile Appender,用于将日志输出到文件中,第一次生成error.log,之后每次翻滚会把erroe.log重命名为当天时间,例如2023-09-20.log,然后在生成一个新的error.log,依次类推 -->
        <RollingFile name="ErrorFile" fileName="./logs/error.log" filePattern="./logs/%d{yyyy-MM-dd}.log">
            <!-- 定义日志的输出方式和格式 -->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 日志消息的格式化方式 -->
            <PatternLayout>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 滚动策略,每天0点创建新的日志文件,不管是否有日志生成 -->
                <CronTriggeringPolicy schedule="0 0 0 * * ?" />
                <!-- 时间触发策略,每隔1分钟检查是否需要滚动 -->
                <TimeBasedTriggeringPolicy interval="1" />
            </Policies>
            <!--这里配置了滚动策略,max 属性设置为 "30",表示最多保留30个滚动文件。当日志文件数量达到30个时,旧文件会被删除-->
            <DefaultRolloverStrategy max="30">
                <!--maxDepth属性设置为 "0",则删除操作将仅删除 basePath 目录下的文件,不会删除任何子目录、 设置为"1"则删除路径下1级子目录的文件,依次类推-->
                <!--basePath 属性指定了删除操作的基本路径-->
                <Delete basePath="./logs/" maxDepth="0">
                <!--只有文件名匹配 *.log 且最后修改时间在7天之前的日志文件会被删除-->
                    <IfFileName glob="*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>

        </RollingFile>

        <!-- Console Appender,用于将日志输出到控制台 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 过滤器,只接受 INFO 级别及以上的日志消息 -->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 日志消息的格式化方式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>

    <!-- 配置日志的根Logger -->
    <Loggers>
        <Root level="INFO">
            <!-- 关联日志输出目标,这里关联了 "ErrorFile" 和 "Console" 两个输出源 -->
            <AppenderRef ref="ErrorFile"/>
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

 4、以下是一个示例目录结构,其中 <Delete> 元素的 maxDepth 设置为 "2",以便删除 basePath 目录下的文件、一级子目录中的文件,以及二级子目录中的文件:

目录结构解释:
./logs/
   ├── log1.log
   ├── log2.log
   ├── subdirectory1/
   │      ├── log3.log
   │      └── subsubdirectory1/
   │              └── log5.log
   └── subdirectory2/
          ├── log4.log
          └── subsubdirectory2/
                 └── log6.log

如果你的删除配置中 maxDepth 设置为 "2",删除操作将删除以下文件:

  • ./logs/log1.log
  • ./logs/log2.log
  • ./logs/subdirectory1/log3.log
  • ./logs/subdirectory2/log4.log

但不会删除以下文件:

  • ./logs/subdirectory1/subsubdirectory1/log5.log
  • ./logs/subdirectory2/subsubdirectory2/log6.log

这就是 maxDepth 设置为 "2" 时的行为,它递归删除指定深度以下的文件,但不会删除更深层次的子目录中的文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是Spring Boot集成log4j2输出日志文件的步骤: 1. 在pom.xml文件中添加log4j2的依赖 ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 2. 在src/main/resources目录下创建log4j2.xml文件,并配置输出文件的路径、格式等信息。以下是一个示例配置文件: ``` <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <RollingFile name="RollingFile" fileName="logs/log4j2.log" filePattern="logs/log4j2-%d{yyyy-MM-dd}-%i.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10MB"/> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> <AppenderRef ref="RollingFile"/> </Root> </Loggers> </Configuration> ``` 3. 在Spring Boot的启动类中添加注解@EnableAsync和@ImportResource,开启异步调用和导入log4j2.xml配置文件。 ``` @SpringBootApplication @EnableAsync @ImportResource(locations = {"classpath:log4j2.xml"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 4. 在需要输出日志的类中,使用log4j2日志记录器进行日志输出。以下是一个示例: ``` import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class SampleClass { private static final Logger logger = LogManager.getLogger(SampleClass.class); public void doSomething() { logger.info("This is a sample log message."); } } ``` 这样就完成了Spring Boot集成log4j2输出日志文件的配置。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值