2015-05-16 6 views
0

Вот log4j.xml, который я использую с моим приложением spring.Почему изменение корневого регистратора не влияет на других регистраторов?

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender name="PRIMARY" class="org.apache.log4j.rolling.RollingFileAppender"> 
     <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
      <param name="FileNamePattern" value="/var/log/myappcontroller-%d{yyyy-MM-dd}.log"/> 
     </rollingPolicy> 
     <layout class="org.apache.log4j.EnhancedPatternLayout"> 
      <param name="ConversionPattern" value="%d{ISO8601} %d %-5p %c - %m%n"/> 
     </layout> 
    </appender> 


<logger name="com.myapp.usercontroller" additivity="false"> 
     <level value=“INFO"/> 
     <appender-ref ref="CONSOLE"/> 
     <appender-ref ref="PRIMARY"/> 
    </logger> 


    <root> 
     <priority value="INFO”/> //changing this to DEBUG 
     <appender-ref ref="PRIMARY"/> 
     <appender-ref ref="CONSOLE"/> 
    </root> 

Два вопроса:

1) при изменении priority value =DEBUG в <root>, я надеялся увидеть журналы отладки из com.myapp.usercontroller. Но я не сделал этого. почему изменение значения <root> не повлияло.

2) Наоборот, я начинаю видеть лесорубов (org.apache.http)

DEBUG org.apache.http.headers - http-outgoing-0 >> POST /token HTTP/1.1 

Почему это так? Я не настроил этот регистратор. но изменение <root> оказывает прямое влияние на этот регистратор.

Спасибо за объяснение

ответ

3

Вашего явное определение регистратора называется com.myapp.usercontroller содержит параметр порогового уровня, который переопределяет значение, которое иначе было бы унаследованным от корневого регистратора. Когда вы изменяете приоритет корневого регистратора от INFO до DEBUG, это влияет на каждый регистратор , за исключением тех регистраторов, которые имеют явно сконфигурированное значение. Вот почему вы видите журналы DEBUG от org.apache.http.headers, но не для вашего контроллера.

Обратите внимание, что log4j xml запутан в том, что он использует priority для корневого регистратора, но level для названных логгеров, хотя оба они относятся к порогам регистрации.

+0

так что уровень отладки для 'com.myapp.usercontroller' применяется к' com.myapp.usercontroller.xxx' и т. Д. Правильно? –

+1

Это правильно. Точки действуют как разделители иерархии. – skaffman