如何在Log4J2中使用service loader服务动态设置日志目录?

问题描述 投票:0回答:1

我知道在 Log4j2 中,您可以使用以下方法动态设置日志记录目录:

System.setProperty('logDirectory', getLogDirectoryDynamically());

并在 Log4j2 的配置中使用该值:

<File name="File" fileName="${sys:logDirectory:-.}/my.log" append="false">
...
</File>

好吧,但现在假设,无论出于何种原因,您没有一个可以调用

main
的中心位置(例如主类没有
System.setProperty('logDirectory', ...)
方法)。

有没有一种方法可以注册一些(java.util.ServiceLoader)服务,您可以在其中添加此

logDirectory
作为属性,也许可以通过实现
org.apache.logging.log4j.util.PropertySource
接口或类似的东西?

目标是在第一次

LogManager.getLogger(...)
调用时,您的附加属性源将由
java.util.ServiceLoader
加载,其中包含
logDirectory
的值。

log4j log4j2
1个回答
0
投票

配置文件中未使用

PropertySource
服务。

您可以实施的是

StrLookup
。查找不是通过普通的
ServiceLoader
机制来检测的,而是通过Log4j的插件机制来检测的,所以需要用以下方式注释该类:

@Plugin(name = "mylookup", category = StrLookup.CATEGORY)

并使用

log4j-core
中包含的注释处理器进行编译(大多数时候它会被自动检测到)。

完成后,您可以使用:

<File name="File" fileName="${mylookup:logDirectory:-.}/my.log" append="false">
...
</File>

在你的配置文件中。

备注:查找的名称必须全部小写。

© www.soinside.com 2019 - 2024. All rights reserved.