如何从代码中的日志配置中获取属性



我有一个带有记录器配置的文件。我用param:启动了我的Spring应用程序

-Dlog4j2.configurationFile=file:/home/project/log4j2.properties

例如,我想在代码中获得属性appender.rolling.layout.patter?我不想使用InputStream直接读取文件。我能从环境上下文中得到它吗?还是别的什么?

您应该能够使用System.getProperty,这里对此进行了解释。

System类有两个不同版本的getProperty。二者都检索参数列表中命名的属性的值。这个两个getProperty方法中比较简单的一个采用单个参数property键例如,要获取path.separator的值,请使用以下声明:

System.getProperty("path.separator");

所以这应该能奏效:

System.getProperty("log4j2.configurationFile");

基本上您不能:一旦Configuration初始化,ConfigurationSource就不再可用。

但是,您可以循环运行时组件并检索所需的属性。例如,如果您想记录配置的RollingFileAppender的所有filePattern属性,可以使用:

final LoggerContext ctx = LogManager.getContext(false);
if (ctx instanceof org.apache.logging.log4j.core.LoggerContext) {
final Configuration config = ((org.apache.logging.log4j.core.LoggerContext) ctx)
.getConfiguration();
final LoggerConfig rootLogger = config.getRootLogger();
for (final Appender appender : rootLogger.getAppenders().values()) {
if (appender instanceof RollingFileAppender) {
final RollingFileAppender rfa = (RollingFileAppender) appender;
logger.info("Found appender with name {} and file pattern {}.", rfa.getName(),
rfa.getFilePattern());
}
}
}

然而,在哪里可以找到属性,或者它在运行时是否可用,并没有硬性规定:例如,许多Appender属性都存储在它们的管理器中。提供另一个示例:文件appenders的append属性只能通过appender下面的OutputStream的反射来使用。

最新更新