我們必須在我們的應用程序中引入日誌記錄。我們決定使用log4j是個不錯的選擇。也有人告訴我們應該使用singleton模式來使用log4j,有人會強調如何以及爲什麼?如何在代碼中使用log4j?
回答
如果您是第一次引入日誌記錄,那麼請使用Logback。使用配置文件suggested here並將其添加到類路徑中。記錄將被自動配置。
你爲什麼第一次提到。第一次如何有幫助? – 2010-11-09 14:01:18
即使世界已經進步了,有些人仍然被log4j困住了;-)。一旦你有一些工作,並且團隊對此感到滿意,引入更好的替代方案確實很難。因此,在引入新的框架/技術時,儘可能進行盡職調查並尋找更好的選擇。如何查看此處以找出Logback更好的原因:http://logback.qos.ch/reasonsToSwitch.html – 2010-11-09 14:04:47
在單模式中,Logger
字段是靜態的類:
public class SomeAwesomeClass {
private static final Logger logger = Logger.getLogger(SomeAwesomeClass.class);
}
另一種方法是使Logger
場非靜態(即,SomeAwesomeClass
每個實例保持對所述Logger
一個參考):
public class SomeAwesomeClass {
private final Logger logger = Logger.getLogger(SomeAwesomeClass.class);
}
我不認爲它使一個很大的區別,你選擇哪條路線,因爲我相信的Log4j將不斷返回相同的Logger
實例的每個實例SomeAwesomeClass
。真的,這只是不必要的對象引用,所以你不妨使用單例模式。
然而,如果你這樣做非單例模式成爲必要:
public class SomeAwesomeClass {
private final Logger logger = Logger.getLogger(getClass());
public void doSomething() {
log.info("Doing something");
}
}
public class AwesomerClass extends SomeAwesomeClass {
}
後來......
SomeAwesomeClass o = new AwesomerClass();
o.doSomething();
在這個例子中,logger
字段對應AwesomerClass
,而不是SomeAwesomeClass
。
之所以單身,有時優選的是,我們要記錄儀每個應用程序只有一個實例,否則,記錄程序的每一個新實例,將有一個新創建的文件或現有日誌的覆寫文件。
至於Log4J是否是一個不錯的選擇將取決於你的研究/經驗與不同的記錄器可用。這完全取決於你的偏好(我總是使用Log4J,因爲我發現它更容易配置,但我不偏向任何記錄器)。
著名的在那裏是:
- Log4J的
- SLF4J
- 的logback
- Java的自己的日誌....
有網頁,其中顯示一些例子你如何使用記錄器。 Here是Log4J vs SLF4J的簡要比較。
- 1. log4j如何在Java代碼中設置FileAppender編碼?
- 2. 如何從Java代碼中禁用log4j日誌記錄
- 3. 如何在第三方jar上調試log4j(代碼不可用)?
- 4. 如何在代碼中創建新的log4j ConsoleAppender而不是config?
- 5. 如何在gradle任務中使用log4j
- 6. 如何在eclipse rcp中使用log4j
- 7. 如何在log4j中使用AsyncAppender?
- 8. 如何在glassfish中使用log4j
- 9. 如何在Log4j中使用SizeBasedTriggeringPolicy和TimeBasedRollingPolicy?
- 10. 如何在html代碼中使用php代碼引用
- 11. 如何在iPHone中使用ffmpeg代碼
- 12. 如何在angularjs中使用javascript代碼
- 13. 如何在此代碼中使用「getCharSequence」?
- 14. 如何在代碼中使用連接?
- 15. 如何在AS3代碼中使用addChild?
- 16. 如何在Java代碼中使用scala.collection.immutable.List
- 17. 如何在asp.net中使用capcha代碼
- 18. 如何在js.erb中使用Ruby代碼?
- 19. 如何在Cheapcast中使用Chromecast代碼?
- 20. 如何在代碼中使用ThemeManager behinde
- 21. 如何在代碼中使用PyTorch PackedSequence?
- 22. OpenMP如何在Java代碼中使用?
- 23. 如何在Python代碼中使用lzma2?
- 24. 如何在podfile中使用源代碼?
- 25. 如何在HTML中使用C#代碼?
- 26. 如何在代碼中使用IHardwareService?
- 27. 如何在JavaScript代碼中使用HTML?
- 28. 如何在此代碼中使用HostingEnvironment.MapPath()
- 29. 如何在java代碼中使用parenetheses
- 30. 如何在雲代碼中使用Parse.Op?
考慮slf4j而不是log4j。 – DwB 2010-11-09 13:57:29
什麼是slf4j?它有什麼不同.. – 2010-11-09 14:13:43