如何从日志配置里面获取属性代码?

bprjcwpo  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(138)

我有一个带有日志配置的文件。我用param:
-Dlog4j2.configurationFile=file:/home/project/log4j2.properties
例如,我想在代码中获得属性 appender.rolling.layout.pattern?我不想使用InputStream直接读取文件。我可以从环境上下文中获得它吗?或者其他东西?

brccelvz

brccelvz1#

您应该能够使用System.getProperty,here解释道。
System类有两个不同版本的getProperty。这两个版本都检索参数列表中命名的属性的值。两个getProperty方法中较简单的一个采用单个参数,即属性键。例如,若要获取path.separator的值,请使用以下语句:

System.getProperty("path.separator");

因此,这应该可以达到目的:

System.getProperty("log4j2.configurationFile");
igsr9ssn

igsr9ssn2#

基本上你不能:一旦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属性存储在它们的管理器中。再举一个例子:文件附加器的append属性仅通过附加器下的OutputStream上的反射可用。

相关问题