Как направить операторы журнала Hibernate в разные файлы журналов для разных приложений, используя файл jboss-log4j.xml - PullRequest
3 голосов
/ 13 февраля 2009

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

Ответы [ 4 ]

2 голосов
/ 03 февраля 2010

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

Пример (слегка адаптированный из приведенного выше источника, посмотрите в разделе Развертывание приложения в виде .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>
0 голосов
/ 01 октября 2009

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

Log4J предоставляет Сопоставленный диагностический контекст . Этот контекст может быть установлен в другое значение (в зависимости от вашего приложения) до запуска кода гибернации. Каждый оператор журнала, выданный hibernate, также содержит содержимое MDC.

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

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

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

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

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

Карлу

...