2015-02-05 4 views
0

У меня есть требование поддерживать отдельные файлы регистрации EAR1.log и EAR2.log для двух приложений Java EE EAR1 и EAR2 соответственно, используя LOG4J2 v2.1. Пройдя через интернет, я мог видеть помощь, специфичную для LOG4J v1.x, но не смог найти ее для LOG4J2.Отдельное ведение журнала с использованием LOG4J2

EAR1 (нужно использовать «EAR1-log4j2.xml»):

1. Web project “web1” 
2. EJB project “ejb1” 
3. Java project “java1” 
4. Java project “java2” 
5. Java project “java3” 

EAR2 (нужно использовать «EAR2-log4j2.xml»):

1. Web project “web2” 
2. EJB project “ejb2” 
3. Java project “java1” (same as above) 
4. Java project “java2” (same as above) 
5. Java project “java3” (same as above) 

http://logging.apache.org/log4j/2.x/manual/migration.html http://logging.apache.org/log4j/2.x/manual/logsep.html

, что сейчас работает: мой log4j2.xml помещается в ApplicationServer & классам один журнал успешно получать написана для

моих завершенных попыток как в EAR, чтобы поддерживать отдельные файлы журнала для обоих уха: • Изменение web.xml применяется только изменение ведения журнала веб-проект в одиночку • Я попытался следующий код, но это относится только к текущему классу

LoggerContext loggerCtx = Configurator.initialize("mrpst", null, PathOfMyLog4j2XmlPath); 
        Logger log = loggerCtx.getLogger("MyClassName"); 

Я пытаюсь проверить, если это возможно, чтобы выполнить это требование путем редактирования log4j2.xml в одиночку (без изменения кода). Оцените, можно ли предоставить ссылку на документацию или какой-либо альтернативный подход.

+0

Какой сервер приложений вы используете? т.е. Websphere, JBoss, Weblogic, Glassfish. –

+0

@Paul, мы используем сервер приложений Websphere 8.0.0.8. В зависимости от используемых банок используются log4j-api/core/web version 2.1 – Anudeep

+0

Если у пакетов EAR есть ключевое различие, вы можете создать два Appenders и два регистратора для каждой структуры пакета. –

ответ

0

Мое предложение состоит в том, чтобы вставлять контекст в ваше событие журнала и фильтровать его в этом контексте с использованием маршрута регистрации, который направляется к соответствующему приложению.

В точке лесозаготовок:

String routeKey = SOME_FIELD_THAT_IDENTIFIES_CONTAINER; 
ThreadContext.put("myEARroute", routeKey); 

В вашем log4j2.xml конфигурации:

<Routing name="myEARroute"> 
    <Routes pattern="$${ctx:myEARroute}"> 
     <!-- if you forget to inject context, the routing key will be empty --> 
     <Route 
      key="$${ctx:myEARroute}" 
      ref="STDOUT" /> 
     <Route 
      key="EAR1" 
      ref="myEAR1Appender" /> 
     <Route 
      key="EAR2" 
      ref="myEAR2Appender" /> 
    </Routes> 
</Routing> 

Теперь вы просто должны создать appenders соответствия ваших имен Appender:

<RollingRandomAccessFile 
    name="myEAR1Appender" 
    filename="logs/Ear1.log" 
    <!-- fill in the rest of your appender config, as desired --> 
</RollingRandomAccessFile> 

повторить для других приложений.

+0

Поскольку у меня нет другого способа связаться с вами, я должен прокомментировать этот ответ. Если вы допустили ошибку в своем голосовании или добавили что-то, вы можете оставить комментарий под моим сообщением, а не редактировать сообщение. Редактирование, которое изменяет значение сообщения, не будет проходить мимо обзора, так что сделайте их, когда вы достигнете 2k, и когда вы полностью уверены. Что касается содержания вашего предлагаемого редактирования, просто оставьте сообщение в комнате RegEx или комментарий под моим сообщением, и давайте обсудим его там. – nhahtdh

+0

Спасибо за информацию. Очевидно, все еще новичок в правилах. :) В качестве объяснения ошибочного щелчка на вашем ответе, FF пошел черным, и я случайно нажал, чтобы попытаться вернуть видеодрайвер. Не знаю, какая вкладка была активной, и когда FF разбился и перезапустился, я увидел, что я проголосовал. D'OH! –

Смежные вопросы