【问题标题】:LOG4J Load muliple log4j filesLOG4J 加载多个 log4j 文件
【发布时间】:2011-10-11 19:33:59
【问题描述】:

对于每个事件,我的应用程序中有五个不同的 log4j 属性文件。我不希望应用程序使用 DOM 或 PropertyConfigurator 加载文件。但我想将所有这些属性加载到一个 Map 中,事件名称为键,属性或记录器为值。这样当我使用事件名称调用 getLogger 方法时,将返回基于事件名称的适当记录器对象。

这篇文章中的实现在一定程度上帮助了我。 log4j log file names? 他们正在根据作业动态创建记录器对象。但我想为每个事件使用静态 log4j 文件并将其加载并返回。

我还检查了这篇文章中的回复。 multiple log4j instance configuration 但由于每个事件的事件名称和附加程序列表在我的应用程序中将是一个巨大的数字,为了更好的可维护性目的,我为每个事件选择一个 log4j 文件。

期待您的帮助。 谢谢, 拉迪卡

【问题讨论】:

  • log4j 确实不是为多个配置文件设计的。我建议您使用具有多个记录器的单个配置文件,每个事件一个。这将最大限度地减少您的长期维护,因为您不必维护 log4j 的自定义版本或使用不打算成为公共 API 一部分的类和方法。

标签: log4j


【解决方案1】:

我为每个定义的事件都有 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;
}

【讨论】:

  • 我怀疑这是否可行。 Log4J 在类加载器级别初始化,连续调用PropertyConfigurator.configure 可能无法完全摆脱以前在同一线程上完成的配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多