Раздельное ведение журнала между различными компонентами EE (REST / EJB)
Моя цель - разделить конфигурацию log4j между REST и EJB в веб-приложении JEE 5 (JBoss 5.1).
Для модуля 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 ответ
Log4J держит свою конфигурацию на уровне загрузчика классов. Если два модуля JEE совместно используют загрузчик классов, они будут иметь одну конфигурацию Log4J во время выполнения.
Чтобы разделить ведение журнала между модулями, вам необходимо:
- Настройте сервер приложений для использования отдельных загрузчиков классов для отдельных модулей (не все серверы приложений позволяют это); а также
- Предоставьте отдельную конфигурацию Log4J для каждого загрузчика классов.