我有一个带有日志配置的文件。我用param:-Dlog4j2.configurationFile=file:/home/project/log4j2.properties例如,我想在代码中获得属性 appender.rolling.layout.pattern?我不想使用InputStream直接读取文件。我可以从环境上下文中获得它吗?或者其他东西?
-Dlog4j2.configurationFile=file:/home/project/log4j2.properties
brccelvz1#
您应该能够使用System.getProperty,here解释道。System类有两个不同版本的getProperty。这两个版本都检索参数列表中命名的属性的值。两个getProperty方法中较简单的一个采用单个参数,即属性键。例如,若要获取path.separator的值,请使用以下语句:
System.getProperty("path.separator");
因此,这应该可以达到目的:
System.getProperty("log4j2.configurationFile");
igsr9ssn2#
基本上你不能:一旦Configuration被初始化,ConfigurationSource就不再可用。不过,您可以循环执行执行阶段元件,并撷取想要的特性。例如,如果您想要记录已设定RollingFileAppender的所有filePattern特性,您可以用途:
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上的反射可用。
Appender
append
OutputStream
2条答案
按热度按时间brccelvz1#
您应该能够使用System.getProperty,here解释道。
System类有两个不同版本的getProperty。这两个版本都检索参数列表中命名的属性的值。两个getProperty方法中较简单的一个采用单个参数,即属性键。例如,若要获取path.separator的值,请使用以下语句:
因此,这应该可以达到目的:
igsr9ssn2#
基本上你不能:一旦
Configuration
被初始化,ConfigurationSource
就不再可用。不过,您可以循环执行执行阶段元件,并撷取想要的特性。例如,如果您想要记录已设定
RollingFileAppender
的所有filePattern
特性,您可以用途:但是,对于在哪里找到该属性,或者该属性是否在运行时可用,并没有硬性规定:例如,许多
Appender
属性存储在它们的管理器中。再举一个例子:文件附加器的append
属性仅通过附加器下的OutputStream
上的反射可用。