我的应用程序中为每个事件提供了五个不同的log4j属性文件。我不希望应用程序使用DOM或PropertyConfigurator加载文件。但是我想将所有这些属性加载到Map中,其中事件名称为键,Properties或Logger作为值。因此,当我使用事件名称调用getLogger方法时,将返回基于事件名称的相应记录器对象。
这篇文章的实现在一定程度上帮助了我。 log4j log file names? 它们根据作业动态创建记录器对象。但是我想为每个事件使用静态log4j文件并加载它并将其返回。
我还检查了这篇文章中的回复。 multiple log4j instance configuration 但是,由于事件名称和每个事件的追加者列表在我的应用程序中将是一个巨大的数字,为了更好的可维护性,我选择了每个事件的一个log4j文件。
期待你的帮助。 谢谢, 拉迪卡
答案 0 :(得分:0)
我为每个定义的事件都有log4j文件。 传递事件名称并使用属性配置程序在上下文中加载特定于事件的log4j属性文件。然后getLogger方法将具有该Logger。
private static synchronized Logger getEventLogger(String eventName) {
Logger logger = null;
try {
logger = m_loggers.get(eventName);
if (logger == null) {
PropertyConfigurator.configure(eventName + ".properties");
logger = Logger.getLogger(eventName);
m_loggers.put(eventName, logger);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return logger;
}