2009-02-13 1 views
3

Я использую сервер JBOSS 4.2.2 для развертывания нескольких веб-приложений. Каждое приложение использует Hibernate, и для каждого приложения есть файлы saperate log и saparate appendar. Теперь для протоколов Hibernate для одного приложения должно быть указано в файле журнала этого конкретного приложения. Кто-нибудь знает, как настроить файл log4j.xml для достижения этого?Как спрятать операторы спящего регистратора в разных файлах журналов для приложений differnet с использованием файла jboss-log4j.xml

Спасибо и уважение, Milind

+1

Для выяснения вопроса: JBossAS использует log4j для своих собственных лесозаготовок, так что приложение развернуто на сервер не может настроить log4j для собственного использования (по крайней мере, не легко, IIRC). «Рекомендуемый» подход заключается в том, чтобы все приложения добавляли свои конфигурации ведения журнала в jboss-log4j.xml. Если два приложения используют hibernate, все журналы категории org.hibernate из любого из них перейдут к одному и тому же приложению. Milind хочет, чтобы они переходили в разные файлы журналов. –

ответ

0

Если у вас есть несколько приложений, каждый из которых работает спящий режим просто создать Appender для спящего режима в log4j.xml файл приложение с путем к классам классов Hibernate т.е. org.hibernate и это должно направлять вывод в указанный файл журнала.

Если это не работает, проверьте, что hibernate не собирает файл свойств log4j, который был связан в любую из ваших баннеров библиотеки. Если спящий режим не может найти файл log4j.xml, то вы должны получить предупреждающее сообщение в System.out

Карлу

+1

Я думаю, вопрос заключается в том, как разделить сообщения журнала org.hibernate между различными файлами журнала для каждого веб-приложения. –

0

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

Log4J предоставляет Mapped Diagnostic context. Этот контекст может быть установлен на другое значение (в зависимости от вашего приложения) до запуска спящего кода. Каждый log-оператор, выданный спящим режимом, также содержит содержимое MDC.

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

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

0
  1. Добавление НДЦ. Журналы по-прежнему идут в один и тот же файл, но файл будет намного легче grep.
  2. Изменение JBoss загрузки классов таким образом, что каждое приложение может иметь свой собственный log4j.xml
2

В JBoss вы можете использовать фильтр TCL, как описано here. Просто добавьте фильтр в ту часть конфигурации, которую вы хотите манипулировать.

Пример (слегка адаптирован из выше источника, смотрите в разделе Развертывание приложений Как .war Файл):

<appender name="App1Log" class="org.apache.log4j.FileAppender"> 
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler" /> 
    <param name="Append" value="false"/> 
    <param name="File" value="${jboss.server.log.dir}/app1.log"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%8.8t][%20.20c] %m%n"/> 
    </layout> 
    <filter class="org.jboss.logging.filter.TCLFilter"> 
     <param name="AcceptOnMatch" value="true"/> 
     <param name="DeployURL" value="app1-exp.war"/> 
    </filter> 
</appender> 
Смежные вопросы