从 log4j2.xml 配置中引用 java class 变量
Referencing java class variable from log4j2.xml configuration
我正在使用 log4j2 并使用 log4j2.xml 进行配置。我正在配置 PatternLayout
,它的模式当前是 %d [%t] %p %c - %m%n
。它与 log4j2 核心 Javadoc 中定义的 PatternLayout.SIMPLE_CONVERSION_PATTERN
相同。那么是否可以引用这个变量而不是将值复制到 xml?
附上我的完整 log4j2.xml 供您参考。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="consoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%t] %p %c - %m%n" />
</Console>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="consoleAppender" />
</Root>
</Loggers>
</Configuration>
您至少有以下选择:
- 使用环境变量,例如:
<PatternLayout pattern="${env:MY_PATTERN}" />
。并在初始化记录器之前定义变量,其中:System.setProperty("MY_PATTERN",PatternLayout.SIMPLE_CONVERSION_PATTERN)
.
或者,如果您需要根据某些条件在运行时定义模式,您可以使用自定义附加程序定义自己的 Logger
class,例如(这是使用文件附加程序,但你会明白的):
public class MyLogClass {
private static Logger log = Logger.getLogger(MyLogClass.class);
private static boolean initFlag = false;
private static void initLogger(){
log.setLevel(Level.DEBUG);
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = new Date();
RollingFileAppender appender = new RollingFileAppender();
appender.setAppend(true);
appender.setMaxFileSize("1MB");
appender.setMaxBackupIndex(1);
appender.setFile("my_log_file-" + dateFormat.format(date) + ".log");
PatternLayout layOut = new PatternLayout();
layOut.setConversionPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN);
appender.setLayout(layOut);
log.addAppender(appender);
}
public static Logger getLogger(){
if(initFlag == false){
initLogger();
initFlag = true;
return MyLogClass.log;
} else {
return MyLogClass.log;
}
}
}
然后像这样使用它:
LogClass.getLogger().debug("test");
我正在使用 log4j2 并使用 log4j2.xml 进行配置。我正在配置 PatternLayout
,它的模式当前是 %d [%t] %p %c - %m%n
。它与 log4j2 核心 Javadoc 中定义的 PatternLayout.SIMPLE_CONVERSION_PATTERN
相同。那么是否可以引用这个变量而不是将值复制到 xml?
附上我的完整 log4j2.xml 供您参考。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="consoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%t] %p %c - %m%n" />
</Console>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="consoleAppender" />
</Root>
</Loggers>
</Configuration>
您至少有以下选择:
- 使用环境变量,例如:
<PatternLayout pattern="${env:MY_PATTERN}" />
。并在初始化记录器之前定义变量,其中:System.setProperty("MY_PATTERN",PatternLayout.SIMPLE_CONVERSION_PATTERN)
. 或者,如果您需要根据某些条件在运行时定义模式,您可以使用自定义附加程序定义自己的
Logger
class,例如(这是使用文件附加程序,但你会明白的):public class MyLogClass { private static Logger log = Logger.getLogger(MyLogClass.class); private static boolean initFlag = false; private static void initLogger(){ log.setLevel(Level.DEBUG); DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); Date date = new Date(); RollingFileAppender appender = new RollingFileAppender(); appender.setAppend(true); appender.setMaxFileSize("1MB"); appender.setMaxBackupIndex(1); appender.setFile("my_log_file-" + dateFormat.format(date) + ".log"); PatternLayout layOut = new PatternLayout(); layOut.setConversionPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN); appender.setLayout(layOut); log.addAppender(appender); } public static Logger getLogger(){ if(initFlag == false){ initLogger(); initFlag = true; return MyLogClass.log; } else { return MyLogClass.log; } } }
然后像这样使用它:
LogClass.getLogger().debug("test");