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

log4j2.xml 使用 application.yml 配置的属性

参考:https://www.jianshu.com/p/1f2427c87139

log4j2.xml 是不归 spring 管理的,所以也就没法读取到 application.yml 里面的配置了。 解决方式: 通过 spring 的 监听器(Listener)功能,将我们读取到的 application.yml 的日志路径设置到系统属性,然后在日志文件里面读取对应的系统属性就行了。

LoggingListener.java

通过 spring 的 监听器(Listener)功能,将我们读取到的 application.yml 的日志路径设置到系统属性,或者使用MDC

import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.boot.context.logging.LoggingApplicationListener;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.stereotype.Component;/*** 读取yml配置传递到log4jXml中** @author Clay*/
@Component
public class LoggingListener implements ApplicationListener<ApplicationEvent>, Ordered {/*** 提供给日志文件读取配置的key,使用时需要在前面加上 sys:*/private final static String LOG_PATH = "log.path";/*** spring 内部设置的日志文件的配置key*/private final static String SPRING_LOG_PATH_PROP = "spring.log-file-path";@Overridepublic void onApplicationEvent(ApplicationEvent applicationEvent) {if (applicationEvent instanceof ApplicationEnvironmentPreparedEvent) {ConfigurableEnvironment environment = ((ApplicationEnvironmentPreparedEvent) applicationEvent).getEnvironment();String filePath = environment.getProperty(SPRING_LOG_PATH_PROP);if (StringUtils.isNotEmpty(filePath)) {System.err.println("=================" + filePath);System.setProperty(LOG_PATH, filePath);}}}@Overridepublic int getOrder() {// 当前监听器的启动顺序需要在日志配置监听器的前面,所以此处减 1return LoggingApplicationListener.DEFAULT_ORDER - 1;}}

application.yml

spring: log-file-path: "F:/logs/"

log4j2.xml

<Property name="log-path">${sys:log.path}</Property>

Application.java

这里没有贴出注解,关键于.addListeners(new LoggingListener())

内置Tomcat

public class Application {public static void main(String[] args) {SpringApplication application = new SpringApplication(Application.class);// 添加 日志监听器,使 log4j2-spring.xml 可以间接读取到配置文件的属性application.addListeners(new LoggingListener());application.run(args);}}

外置Tomcat

public class TomcatApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {// 添加 日志监听器,使 log4j2-spring.xml 可以间接读取到配置文件的属性builder.application().addListeners(new LoggingListener());return builder.sources(Application.class);}}

转至:https://blog.csdn.net/xiaokanfuchen86/article/details/126695797

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • centos部署jar包
  • 【qt】正则表达式来判断是否为邮箱登录
  • 代理模式(大话设计模式)C/C++版本
  • SQL注入安全漏洞与防御策略
  • 展望未来:在【PyCharm】中结合【机器学习】实现高效的图形化处理
  • STM32之六:SysTick系统滴答定时器
  • Jenkins中Node节点与构建任务
  • 32路串口服务器 应用领域
  • ISO 45001:提升职业健康与安全管理水平的关键
  • MAC通过SSH连接VirtualBox中的虚拟机
  • 整洁架构SOLID-里氏替换原则(LSP)
  • MySQL表的内连和外连(重点)
  • Java 如何不用再每次新建线程,直接使用公共线程池
  • IoTDB 集群高效管理:一键启停功能介绍
  • 数据结构——排序算法(冒泡、快速、选择、插入)
  • $translatePartialLoader加载失败及解决方式
  • avalon2.2的VM生成过程
  • C# 免费离线人脸识别 2.0 Demo
  • canvas绘制圆角头像
  • Git 使用集
  • Laravel 菜鸟晋级之路
  • React as a UI Runtime(五、列表)
  • Redis的resp协议
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于字符编码你应该知道的事情
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 收藏好这篇,别再只说“数据劫持”了
  • 微信小程序设置上一页数据
  • 详解NodeJs流之一
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 用简单代码看卷积组块发展
  • 原生 js 实现移动端 Touch 滑动反弹
  • Hibernate主键生成策略及选择
  • 进程与线程(三)——进程/线程间通信
  • 容器镜像
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #数学建模# 线性规划问题的Matlab求解
  • (c语言)strcpy函数用法
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Qt) 默认QtWidget应用包含什么?
  • (层次遍历)104. 二叉树的最大深度
  • (多级缓存)多级缓存
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (一)kafka实战——kafka源码编译启动
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)socket Aio demo