2011-03-15 28 views
4

爲什麼JDK的Logging API認爲這麼差?通過使用Apache Log4j等第三方日誌記錄API,我們會獲得什麼?JDK Logging API

+5

忽略歷史將是一個錯誤:log4j實際上早於java.util.logging(它只在1.4中添加)。所以它已經有3年左右的時間開始成爲標準。問題在於,它不像log4j成爲JUL的替代品而變得非常流行。 – 2011-03-15 14:19:49

回答

3

對於大多數情況下,java.util.Logging就好。大多數第三方日誌軟件包是在Standard API進行任何日誌記錄之前開發的。

2

Log4j是在JDK的Logging API之前創建的。如今,您應該更喜歡使用slf4j以外觀方式處理所有的java日誌記錄世界。

+1

「應該」似乎相當明確,不是嗎? – Riduidel 2011-03-15 14:23:54

+2

這並沒有真正回答這個問題,它只是修改它:爲什麼選擇(第三方依賴項)slf4j而不是(內置的)JUL? – 2011-03-15 14:24:00

+0

@Riduidel糾正爲「應該更喜歡」,現在可以嗎?) – 2011-03-15 14:32:19

1

我在JDK的日誌記錄系統之上使用了一個非常非常薄的自寫層,因爲它易於使用,易於配置並易於擴展。即使沒有這個層,JDK的日誌記錄系統也是足夠的,因此我認爲不需要其他日誌API。另外,因爲它包含在JDK中,所以它應該被認爲是一個標準。

+2

slf4j試圖成爲不是非常非常薄的層? – 2011-03-15 14:34:11

+1

也許吧,但它試圖成爲所有日誌系統的一個非常非常薄的層。 :) – Bombe 2011-03-15 14:39:43

-2

這是因爲JDK的Logger類不是接口。 因此,您對於如何完成日誌記錄沒有(非常少的)控制。

使用commons-logging,log4j,slf4j,您可以選擇如何以及在何處記錄消息。無論是在文件中,數據庫中,重定向到應用程序服務器日誌記錄等。 使用JDK日誌記錄您不能。它始終是一個文件。 如果你想要另一個日誌級別,你不能。

它確實使用像slf4j這樣的可變參數,所以你不必事先連接字符串消息。但其他缺點太大了。

+1

這完全是無恥的。 Java日誌記錄支持一個Handler接口,它允許你記錄幾乎任何東西。它還有9個級別可以登錄 – gshauger 2011-05-18 22:44:12