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

时间:2015-11-23 08:04:38

标签: java xml log4j log4j2

我正在使用log4j2并使用log4j2.xml进行配置。我正在配置public List<DeliveryOrderEntity> listOrders() { List findAllOrders = new ArrayList(); EntityManager entityManager = transactionManager.getEntityManagerFactory().createEntityManager(); try { entityManager.getTransaction().begin(); findAllOrders = entityManager.createNamedQuery("findAllOrders").getResultList(); } catch (Exception e) { e.printStackTrace(); } finally { entityManager.getTransaction().commit(); } return findAllOrders; } ,其模式目前为PatternLayout。它与log4j2核心Javadoc中定义的%d [%t] %p %c - %m%n值相同。那么可以引用这个变量而不是将值复制到xml中吗?

附上我的完整log4j2.xml供您参考。

PatternLayout.SIMPLE_CONVERSION_PATTERN

1 个答案:

答案 0 :(得分:2)

您至少有以下选择:

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

    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;
       }
     }
    }
    
  3. 然后使用它:

    LogClass.getLogger().debug("test");