假設有一個應用程序,它使用log4j
直接,即i。即沒有slf4j
或任何其他包裝。現在我想用logback
替換log4j
。我應該使用slf4j
(或任何其他包裝)?什麼被認爲是「良好做法」?我應該使用slf4j作爲logback的包裝嗎?
回答
你肯定應該使用SLF4J API,如果你以後決定回去log4j的或別的東西,你只需要改變SLF4J橋,和你的應用程序日誌代碼將不修改工作。另外,如果您訪問http://www.slf4j.org/,您會看到slf4j將Logback視爲其本地實現,而Logback實際上本地實現了SLF4J API。
您可以用更改代碼在所有的遷移,使用log4j-over-slf4j.jar
,而不是「真實」 Log4J的一個。這爲它的客戶端提供了與Log4J相同的API,但是將日誌記錄調用指向SLF4J,SLF4J又可以將它們發送到logback。
但是,如果您有修改代碼的選項,那麼我會建議將其更改爲使用SLF4J,然後您可以根據需要交換任何後端(logback,log4j等)。有一件事你不能做的是嘗試,並與Log4J的後端結合log4j-over-slf4j
...
有一個很好的理由使用SLF4J API,無論實際採伐後端,即
log.debug("Foo: {}, Bar: {}", foo, bar);
參數構造。 Log4j總是需要一個完整的字符串來記錄,這就是爲什麼您需要圍繞if
s來查看是否爲昂貴的字符串啓用了語句。在進行檢查之前,SLF4J不會調用foo.toString()或bar.toString(),所以禁用的調用很便宜。
因此,我建議您遷移源SLF4J並使用相應的橋在SLF4J下載使用log4j的作爲後端。這將使您可以像現在這樣繼續進行,無需進一步更改。如果需要,您可以將後端切換回登錄。
正如Evgeniy Dorofeev所提到的,logback本地實現了slf4j-api。這意味着通過slf4j-api(即通過org.slf4j.Logger
的實例)調用logback記錄器完全沒有開銷。您可以直接調用類型爲ch.qos.logback.classic.Logger
而不是org.slf4j.Logger
的記錄器,但這樣做不會提供任何優勢,但如果您選擇這樣做,可能會使其難以遷移到其他日誌記錄框架。
順便說一句,slf4j不是包裝作爲logback是用slf4j-api來實現的。
爲了便於遷移到SLF4J,對於migrating source code to slf4j的工具。對於你無法修改的代碼,log4j,java.util.logging和commons-logging都有bridges。
- 1. 我可以爲SLF4J和Logback使用Log4j.xml配置嗎?
- 2. 如何使用slf4j/logback打包webapp?
- 3. 使用的logback與SLF4J
- 4. 強制slf4j使用logback
- 5. 我應該爲Environment.TickCount製作一個包裝類嗎?
- 6. slf4j logback substituteLogger
- 7. 爲什麼我們在Logback/SLF4J中使用MDC.remove()?
- 8. 如何使用的logback和SLF4J
- 9. 包裝slf4j API
- 10. 的logback VS本土的logback通過SLF4J
- 11. 我應該使用Vulkan裝載機嗎?
- 12. 在使用SLF4J的OSGi應用程序上的java.lang.LinkageError + Logback
- 13. 我應該使用Task.Run包裝慢速呼叫嗎?
- 14. 我應該使用PrintWriter來包裝BufferedWriter嗎?
- 15. 即使使用slf4j,你應該保護你的日誌嗎?
- 16. 使用logback/slf4j/java時拋出異常
- 17. 從slf4j + logback遷移到slf4j + log4j
- 18. Jclouds使用SLF4j + log4j進行日誌記錄而不是SLF4J + logback
- 19. 我應該引用ASP.NET MVC作爲NuGet包嗎?
- 20. 我應該爲休息api包裝器編寫測試嗎?
- 21. 我應該爲所有RESTful JSON交換創建包裝嗎?
- 22. 作爲使用Visual Studio的ASP.NET Web Developer,我應該安裝IIS嗎?
- 23. 我應該爲此使用BlazeDS嗎?
- 24. Logback和SLF4J編程配置
- 25. jboss as 5.1 logback slf4j log4j
- 26. slf4j與glassfish忽略logback
- 27. 轉換LOG4J >> SLF4J + logback
- 28. 我應該在事務中包裝每個db調用嗎?
- 29. 我應該爲我的單頁應用使用node.js嗎?
- 30. 我應該使用模型對象作爲NSUndoManager的目標嗎?
當你在一年內從logback移動到xxx時,如果你使用了slf4j,它會使改變的痛苦減少。 – assylias
slf4j不是logback的包裝,因爲logback是用slf4j-api實現的。 – Ceki