java - 从 log4j2.xml 配置中引用 java 类变量

标签 java xml log4j log4j2

我正在使用 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>

最佳答案

您至少有以下选择:

  1. 使用环境变量,例如:<PatternLayout pattern="${env:MY_PATTERN}" /> .并在记录器初始化之前定义变量,使用:System.setProperty("MY_PATTERN",PatternLayout.SIMPLE_CONVERSION_PATTERN) .
  2. 或者,如果您需要根据某些条件在运行时定义模式,您可以定义自己的 Logger带有自定义附加程序的类,类似于(这是使用文件附加程序,但你会明白的):

    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");

关于java - 从 log4j2.xml 配置中引用 java 类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866157/

相关文章:

java - 如何检查日志条目是否是使用给定的 ConversionPattern 写入的?

java - 使用 Log4j 进行日志记录

java - 错误找不到键 log4j.appender.error 的值

java - JavaFx Gui 与 Swing 的性能对比

java - 'CREATE TABLE' 数据库中的多语句事务中不允许使用 'tempdb' 命令

java - 调用 socket.close() 时套接字未关闭

python - 如何使用Python通过ElementTree使用fromstring进行xml解析?

java - spring中TaskExecutor的用途是什么?

c# - 序列化 bool ?错误反射(reflect)类型

c# - 在 C# 中使用 XML 文字?