跨不同EE组件(REST / EJB)的独立日志记录

时间:2019-02-14 14:32:42

标签: logging log4j ejb java-ee-5

我的目的是在JEE 5 Web应用程序(JBoss 5.1)中在REST和EJB之间分离log4j配置。

对于 REST 模块,我使用ServletContextListener界面:

public void contextInitialized(ServletContextEvent sce) {
     PropertyConfigurator.configure("logfile");
}

对于 EJB 模块,我正在使用StartupBeanManagement界面:

@Override
public void start() throws Exception {
    logger.info("starting configuration bean");
    final String env = System.getProperty("env");
    configureLog(logFilePrefix.replace("{0}", env));
}

但是,如果两个模块都部署在同一个容器中,那么我只能在专用的 REST 日志中看到日志。

如何区分模块之间的日志记录?

1 个答案:

答案 0 :(得分:0)

Log4J在类加载器级别保留其配置。 如果两个JEE模块共享一个类加载器,则它们将在运行时具有一个Log4J配置。

为了分隔模块之间的日志记录,您需要:

  • 将应用程序服务器配置为对单独的模块使用单独的类加载器(并非所有应用程序服务器都允许这样做);和
  • 为每个类加载器提供单独的Log4J配置。