如果問題太重要,請原諒。我對log4j完全陌生。我看到有兩個標籤和標籤,指的是各種appender。 假設我想將我的代碼庫中的信息記錄在一個文件中,將它發送到我的電子郵件並打印到控制檯。我想要將關卡設置爲信息。是不是有足夠的一個標籤引用三個appender?(文件,電子郵件和控制檯)爲什麼我們需要另一個相同?爲什麼我們需要log4j.xml中的root和logger
回答
這就夠了。
在log4j中,記錄器與包或者有時與特定的類關聯。記錄器的包/類由屬性「name」定義。記錄器將消息記錄在它的包中,也記錄在所有子包和它們的類中。唯一的例外是記錄應用程序中所有類的消息的根記錄器。
一個記錄器也有等級,並且可能有一個或多個appender(記錄目的地)連接到它。
在下面的例子中,我們有兩個記錄器:
- 根記錄器記錄與水平INFO或以上的所有包到各個目的地的消息:主機,電子郵件和文件,
「com.foo」記錄器,用於將包含「com.foo」包及其子包的WARN級別或更高級別消息記錄到另一個文件。
<log4j:configuration> <!-- Declaration of appenders FILE, MAIL, CONSOLE and ANOTHERFILE --> ... <!-- --> <logger name="com.foo"> <level value="warn"/> <appender-ref ref="ANOTHERFILE" /> </logger> <root> <priority value ="info" /> <appender-ref ref="FILE" /> <appender-ref ref="MAIL" /> <appender-ref ref="CONSOLE" /> </root> </log4j:configuration>
你應該read more關於log4j的基礎知識。
根記錄器是否也記錄「com.foo」類別的消息? –
@ mmc18是的,定義。所有寫入appender ANOTHERFILE的消息也寫入根記錄器的appender。 –
只需另外注意,您可以通過將記錄器的additivity屬性設置爲false來防止發送到ANOTHERFILE的消息發送到根記錄器。把它看作是一個例外,從低層到頂層(根層)冒泡。 addivity是沒有「拋出」的「catch」 – JReader
- 1. 爲什麼我們需要BeginGetResponse和BeginRead?
- 2. 爲什麼我們需要Bower和Nuget?
- 3. 爲什麼我們需要ClassMethods和InstanceMethods?
- 4. 爲什麼我們需要.htaccess的worpdress?
- 5. DavLockDB:我們需要什麼?
- 6. 什麼是mcrypt,爲什麼和我們需要它在哪裏?
- 7. 爲什麼quicklisp需要「root」特權?
- 8. 爲什麼`sched_setscheduler()`需要root權限?
- 9. 爲什麼在這裏需要$ root?
- 10. 爲什麼我們需要simple_one_for_one?
- 11. 爲什麼我們需要TensorFlow tf.Graph?
- 12. 爲什麼我們需要使用prompt.start()?
- 13. 爲什麼我們需要scalaz.stream迭代?
- 14. 爲什麼我們需要WCF
- 15. 爲什麼我們需要Anaconda 2.7?
- 16. 爲什麼我們需要編寫log.isDebugEnabled?
- 17. 爲什麼我們需要ng-click?
- 18. 爲什麼我們需要Control.Lens.Reified?
- 19. 我們爲什麼需要纖維
- 20. 爲什麼我們需要org.junit.ComparisonFailure?
- 21. 爲什麼我們需要addRequestHeader方法?
- 22. 爲什麼我們需要時代?
- 23. 爲什麼我們需要ContinueWith方法?
- 24. 爲什麼我們需要Java NIO Selector?
- 25. 爲什麼我們需要使用ExitWindowsEx
- 26. 爲什麼我們需要包裝類
- 27. 爲什麼我們需要在JavaScript
- 28. 爲什麼我們需要設置SONAR_RUNNER_OPTS?
- 29. 爲什麼我們需要ioc容器
- 30. mongodb爲什麼我們需要getSisterDB
我的意思是不夠它有一個單一的根標籤?有三個參考appenders? – parameswar