log4j: приоритет категории отличается от порога appender - PullRequest
2 голосов
/ 23 февраля 2010

Я пытался заставить работать этот простой вариант использования, но не могу: определить порог INFO по умолчанию для приложения FILE, но определить категорию с уровнем DEBUG. Это файл jboss 4.2.1.GA log4j.xml, который я использую, где я просто хочу записывать вызовы java.sql.

   <appender name="SQL_FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/sql.log"/>
      <param name="Append" value="false"/>
      <param name="Threshold" value="INFO"/>

      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p [%c] %C %m%n"/>
      </layout>
   </appender>

  <category name="java.sql">
    <priority value="DEBUG"/>
    <appender-ref ref="SQL_FILE"/>
  </category>

   <root>
      <appender-ref ref="SQL_FILE"/>
   </root>

Вместо регистрации просто java.sql он регистрирует INFO и выше и не содержит никакой информации java.sql. Если нет простого решения, то мне остается установить для порога appender значение DEBUG и отключить ведение журнала для нескольких включенных категорий, что кажется пустой тратой времени.

Я попробовал следующее, но не смог заставить его работать: Настройка нескольких файлов журнала в log4j при использовании категорий .

Ответы [ 3 ]

1 голос
/ 23 февраля 2010

Я скоро нашел решение. В основном, сценарий использования описан в вики jboss здесь: http://docs.jboss.org/process-guide/en/html/logging.html Раздел 10.3.5 Перенаправление вывода категории . Эта статья блога также была полезна: ptth: //ourcraft.wordpress.com/2008/10/23/customizing-log4j-logging-on-jboss/#comment-796.

В конечном итоге вот что я использовал, что сработало:

   <appender name="SQL_FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/sql.log"/>
      <param name="Append" value="false"/>

      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p [%c] %C %m%n"/>
      </layout>

   </appender>

<category name="java.sql.Connection"  additivity="false">
    <priority value="DEBUG"/>
    <appender-ref ref="SQL_FILE"/>
</category>  

   <root>
      <appender-ref ref="CONSOLE"/>
      <appender-ref ref="FILE"/>
   </root>

Обратите внимание, что вы не хотите определять приложение SQL_FILE в корне; по какой-то причине. Это был последний кусок.

0 голосов
/ 24 февраля 2010

Дополнительный шаг, необходимый для JBoss 4.2.1.GA, - удалить все файлы jar log4j из войны. Если этот jar включен в вашу войну, файл sql.log никогда не записывается в.

Пример записи maven pom.xml:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.13</version>
    <scope>provided</scope>
</dependency>
0 голосов
/ 23 февраля 2010

Насколько мне известно, классы в пакете java.sql на самом деле не ведут журналирование, и они определенно не пишут в log4j (или даже в общем-журнале).

Однако, для теоретических целей, вот как вы могли бы решить эту проблему, если бы это был другой пакет (и фактически использовалась регистрация общего ресурса):

  1. Удалить пороговое значение из приложения SQL_FILE.
  2. Добавьте строку: <priority value="INFO"/> к элементу <root/> (перед appender-ref).
  3. Сохраните и перезапустите JBoss.

Наконец, обратите внимание, что для некоторых проблем JDBC может быть полезен метод DriverManager.setLogWriter (см. http://java.sun.com/products/jdbc/reference/faqs/index.html#4).

EDIT: Поскольку вы указали, что на самом деле заинтересованы в регистрации выходных данных iBatis, вам просто нужно изменить <category name="java.sql"> на <category name="com.ibatis">.

...