我學習SLF4J和Spring.I log4j的得到比根記錄等從SLF4J看到我們使用一個線如何使用Log4J的
private final Logger logger = LoggerFactory.getLogger(name.class);
我已經看到,這是獲得根記錄由eyerywhere默認。
這是如何得到根記錄器?我錯了嗎?
如何獲得log4j.xml文件中定義的其他記錄器?
這是我的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC
"-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="false">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" />
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</appender>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/log/spring-hib.log" />
<param name="MaxBackupIndex" value="100" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" />
</layout>
</appender>
<logger name="com.example.foo">
<level value="DEBUG"/>
<appender-ref ref="FooLogFile"/>
</logger>
<category name="org.hibernate">
<priority value="DEBUG" />
</category>
<category name="java.sql">
<priority value="debug" />
</category>
<root>
<priority value="INFO" />
<appender-ref ref="ASYNC" />
</root>
</log4j:configuration>
「,這使得它更易於重構,在這種情況下,記錄器名稱將與提供的類的FQN相同(本例中爲「com.example.foo.Bar」)「。我沒有得到最後一行.. – beinghuman
我的意思是,如果Foo的Foo '是'com.example.foo.Bar',然後當你通過'... getLogger(Bar.class)'(哦,在我原來的答案錯字,將解決該問題)記錄器,返回的記錄器的名稱將是「com.example.foo.Bar」。對於「重構友好」語句:將FQN作爲字符串傳遞給Class對象以獲取記錄器的一個區別是,如果重命名類或包,則在後一種情況下仍然會得到正確的記錄器。 –
這幫了我一大堆,非常感謝這個詳細的答案。 +1 – WillBD