我正在使用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
答案 0 :(得分:2)
您至少有以下选择:
<PatternLayout pattern="${env:MY_PATTERN}" />
。并在初始化记录器之前定义变量,使用:System.setProperty("MY_PATTERN",PatternLayout.SIMPLE_CONVERSION_PATTERN)
。或者,如果您需要在运行时根据某些条件定义模式,您可以使用自定义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;
}
}
}
然后使用它:
LogClass.getLogger().debug("test");