Springboot 配置Log4j2.xml中动态读取配置

887 阅读1分钟

[log4j2]支持多种方式的获取值添加进入日志中, 由此衍生出多种lookup~~

可以看下org.apache.logging.log4j.core.lookup包下的代码, 基本上就是官方文档中列的方式, 并可以深入了解框架本身是怎么进行数据获取的, 必要时可自行实现!

支持多种方式动态读取配置, 下面写几个我用过的示例:

1. bundle: ${bundle:BundleName:BundleKey}

bundle: 固定前缀, 标识读取配置文件

BundleName: 配置文件名(如application.properties)

BundleKey: 配置key

eg: ${bundle:application:log.path}

从application.properties中读取key为log.path的值

return ResourceBundle.getBundle(bundleName).getString(bundleKey)

2. sys: sys:some.property{sys:some.property}或{sys:some.property:-default_value}

sys: 标识读取系统属性, 基本是通过System.getProperty()可读取的属性, [jvm参数]等 ${sys:LOG_PATH} 获取日志文件路径

some.property: 属性的key

default_value: 默认值

eg: ${sys:test.log.path:-/opt/logs/}

从系统属性中读取test.log.path属性值, 未取到时默认值为/opt/logs/

3. env基本上和sys一致, 不同点在于读取[系统环境变量]

略略略略略略略略略略

总结上述三种动态配置

上述三种方式,我们本次主要解释第一种方式,第二种方式和第三种方式系统变量和环境变量都差不多都是固定的变量。

springboot使用bundle绑定变量的时候,默认是从application.properties文件获取变量,不支持从yml配置文件,重要的事情说三遍

使用application.properties配置文件

使用application.properties配置文件

使用application.properties配置文件

然后再log4j2.xml配置文件引用对应的变量

image.png

image.png