如何在logback.xml中获取模块路径 参考PID获取的实现方式
logback.xml 读取模块路径的正确实现方式
为什么${LOG_PATH}不生效
${LOG_PATH}不是logback原生内置的占位符,仅在Spring Boot项目中由框架默认注入上下文后才可使用,非Spring Boot环境、或配置文件未兼容Spring上下文的场景下无法直接读取。
正确配置方案
场景1:Spring Boot 项目
- 若要读取项目运行的工作目录,可直接使用JDK自带的系统属性
${user.dir},logback默认支持读取所有JDK系统属性 - 若要自定义模块路径,可按如下步骤操作:
- 把logback配置文件名改为
logback-spring.xml(只有该命名规则的配置文件才能读取Spring上下文的配置) - 在
application.yml或application.properties中添加自定义配置:log: module-path: /deploy/order-module/logs - 在logback配置中直接使用
${log.module-path}读取即可
- 把logback配置文件名改为
场景2:普通Java项目(非Spring Boot)
你可以通过两种方式注入自定义的模块路径变量:
- 启动时通过JVM参数传入:
启动命令中添加参数-Dmodule.path=你的模块实际路径,示例:
之后logback配置中直接用java -Dmodule.path=/data/app/user-module -jar user-module.jar${module.path}读取即可 - 代码启动时手动注入到logback上下文:
之后logback配置中用import ch.qos.logback.classic.LoggerContext; import org.slf4j.LoggerFactory; // 项目初始化阶段执行 LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); context.putProperty("MODULE_PATH", "你的模块路径"); context.reset();${MODULE_PATH}读取即可
最终效果示例(和你给出的PID写法兼容)
{ "process": "${PID}", "modulePath": "${MODULE_PATH}" }
内容的提问来源于stack exchange,提问作者user15425589
相关产品推荐
相关产品推荐

