当前位置: 首页 > article >正文

日志模块新增配置日志根目录和项目模块功能

文章目录

    • 1.日志模块新增监听器支持外部配置
        • 1.common-log4j2-starter项目结构
        • 2.修改log4j2.xml为log4j2-spring.xml(这样可以解决读取外部配置但是提前创建目录的问题)
        • 3.ApplicationEnvironmentPreparedListener.java 监听器读取配置
        • 4.spring.factories 注册监听器
        • 5.log4j2-spring.xml 配置从系统属性中读取
        • 6.测试
          • 1.common-log4j2-starter-demo配置日志根目录和项目模块
          • 2.启动测试
    • 2.common-log4j2-starter更换banner.txt
        • 1.banner.txt
        • 2.application.yml

1.日志模块新增监听器支持外部配置

1.common-log4j2-starter项目结构

CleanShot 2024-12-14 at 14.21.15@2x

2.修改log4j2.xml为log4j2-spring.xml(这样可以解决读取外部配置但是提前创建目录的问题)
3.ApplicationEnvironmentPreparedListener.java 监听器读取配置
package com.sunxiansheng.log4j2.listener;

import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.boot.context.logging.LoggingApplicationListener;
import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;

/**
 * Description: 配置文件已加载,Environment 对象已初始化
 * 读取application.yml文件中log.home和log.module的配置
 *
 * @Author sun
 * @Create 2024/12/13 23:53
 * @Version 1.0
 */
public class ApplicationEnvironmentPreparedListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {

    @Override
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
        ConfigurableEnvironment environment = event.getEnvironment();

        // 获取 log.home 属性并提供默认值
        String logHome = environment.getProperty("log.home", "./logs");
        if ("./logs".equals(logHome)) {
            System.err.println("WARNING: log.home 属性未设置,使用默认值: " + logHome);
        }

        // 获取 log.module 属性并提供默认值
        String logModule = environment.getProperty("log.module", "defaultModule");
        if ("defaultModule".equals(logModule)) {
            System.err.println("WARNING: log.module 属性未设置,使用默认值: " + logModule);
        }

        // 将属性设置为系统属性
        System.setProperty("log.home", logHome);
        System.setProperty("log.module", logModule);
    }

    /**
     * 当前监听器的启动顺序需要在日志配置监听器的前面,保证在日志文件初始化之前读取application.yml的配置,所以此处减 1
     *
     * @return
     */
    @Override
    public int getOrder() {
        return LoggingApplicationListener.DEFAULT_ORDER - 1;
    }
}
4.spring.factories 注册监听器
org.springframework.context.ApplicationListener=\
com.sunxiansheng.log4j2.listener.ApplicationEnvironmentPreparedListener
5.log4j2-spring.xml 配置从系统属性中读取
    <!-- 定义全局属性,可在整个配置文件中使用 -->
    <Properties>
        <!-- 日志存储的根目录 -->
        <Property name="LOG_HOME">${sys:log.home}</Property>

        <!-- 日志文件的名称前缀 -->
        <Property name="LOG_NAME">sunrays-framework</Property>

        <!-- 控制台日志输出格式,带颜色 -->
        <Property name="CONSOLE_LOG_PATTERN">
            %style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{green} %style{[%t]}{blue} %highlight{%p}{FATAL=red blink, ERROR=red, WARN=yellow, INFO=green, DEBUG=cyan, TRACE=magenta} %style{[PFTID:%X{PFTID}]}{magenta} %style{[Module:${sys:log.module}]}{yellow} %style{%logger{36}}{cyan} - %msg%n%throwable
        </Property>

        <!-- 文件日志输出格式,不带颜色 -->
        <Property name="FILE_LOG_PATTERN">
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p [PFTID:%X{PFTID}] [Module:${sys:log.module}] %logger{36} - %msg%n%throwable
        </Property>
    </Properties>
6.测试
1.common-log4j2-starter-demo配置日志根目录和项目模块
log:
  aspect:
    enable: true # 开启自定义的日志切面
  trace:
    enable: true # 开启自定义的日志追踪
  home: /Users/sunxiansheng/IdeaProjects/sunrays-framework/sunrays-demo/common-log4j2-starter-demo/logs # 日志根目录
  module: sunrays-demo/common-log4j2-starter-demo # 模块根目录
server:
  port: 8082
2.启动测试

CleanShot 2024-12-14 at 14.26.06@2x

2.common-log4j2-starter更换banner.txt

1.banner.txt

CleanShot 2024-12-14 at 14.28.29@2x

2.application.yml
spring:
  banner:
    image:
      location: classpath:banner.txt

http://www.kler.cn/a/511526.html

相关文章:

  • C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程
  • 前沿技术趋势洞察与分析:探寻科技变革的多维密码
  • “深入浅出”系列之数通篇:(5)TCP的三次握手和四次挥手
  • SQL Server查询计划操作符——查询计划相关操作符(4)
  • AI时代下 | 通义灵码冲刺备战求职季
  • Netty的相关组件之间的关系
  • ubuntu ESP-IDF开发环境搭建
  • Golang笔记——常用库sync
  • pyqt5开发ui图形化工具
  • 网络安全工程师学习路线
  • 统计学习算法——支持向量机的基本概念
  • Comment(爆破+git泄漏+二次注入)
  • 精选100+套HTML可视化大屏模板源码素材
  • 软路由系统iStoreOS 一键安装 docker compose
  • 【机器学习:二十二、机器学习项目开发的技巧】
  • NiceFish(美人鱼)
  • Python批量发送任务请求(POST)和批量查询任务状态(GET)
  • RC2在线加密工具
  • 游戏行业销售数据分析可视化
  • C#中的Timers.Timer使用用法及常见报错
  • 后端之路——阿里云OSS云存储
  • 关于机器学习的一份总结
  • Linux第五讲:进程概念
  • Nginx请求访问流程
  • 【VRChat · 改模】Unity2019、2022的版本选择哪个如何决策,功能有何区别;
  • iOS 性能优化:实战案例分享