2012-01-05 41 views
14

我有下面的代碼在Java 1.6的:slf4j如何工作?沒有日誌越來越創建

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

private static Logger log = LoggerFactory.getLogger(myfile.class); 

現在,我把SLF4J-API-1.6.4.jar & SLF4J-簡單1.6.4.jar在類路徑&代碼編譯好,但它在哪裏記錄所有的信息?

我已經log.info( 「測試」);但它不創建任何日誌文件。我試着用下面創建內容log4j.properties:

log4j.appender.stdout=org.apache.log4j.RollingFileAppender 
log4j.appender.stdout.File=/var/abc.log 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=[%d{dd-MMM-yyyy HH:mm:ss}]%6p %c{1}:%L - %m%n 
log4j.appender.stdout.MaxFileSize=50000KB 
log4j.appender.stdout.MaxBackupIndex=200 

log4j.rootLogger=info, stdout 

但其沒有工作,我知道上面的文件需要log4j的,但怎麼做SLF4J工作?我是否需要創建類似於log4j的任何屬性文件?如果是這樣,我需要把它放在哪裏?

謝謝!

+1

SLF4J只是一個日誌接口。您需要在類路徑上執行日誌記錄。你是否有一個? – 2012-01-05 03:24:30

+0

您導入slf4j-simple-1.6.4.jar,但您使用log4j作爲記錄器,這就是問題所在。 – 2012-01-05 03:36:44

回答

34

SLF4J只是一個門面,它允許你切換不同的日誌框架容易。所有使用SLF4J API的日誌調用將被委託給底層的日誌框架。

您不必爲SLF4J創建任何屬性文件。您需要做的就是使用與您的日誌框架相匹配的正確「SLF4J綁定」jar來將SLF4J API的所有日誌記錄調用委託給基礎日誌框架。下圖爲SLF4J之間的關係,「SLF4J綁定」,和底層的日誌框架

enter image description here

slf4j-simple-1.6.4.jar代表所有事件到System.err的,但並不代表們的log4j API.So,你應該使用slf4j-log4j12-1.6.4.jar代替。

要總結,你應該使用下面的罐子:

  • SLF4J-API-1.6.4.jar
  • SLF4J-log4j12-1.6.4.jar
  • 的log4j-1.2.16。罐子

參考

1

SLF4J僅僅是一個日誌抽象 - 它不寫任何日誌本身。使用Logback - 它本身實現了SLF4J,由誰寫SLF4J和log4j的是同一個人寫的。 SLF4J和的logback是一個偉大的框架 - 我們愛怎麼SLF4J橋接其他框架(JUL,共享日誌記錄,log4j的),我們選擇的架構(這是的logback)。

+0

我可以使用log4j和這個slf4j一起嗎? – Mike 2012-01-05 03:27:14

+0

是的,如果您願意,可以使用SLF4J登錄到log4j。這就是SLF4J的美妙之處 - 登錄到其界面並隨時更改實現。您需要將文件slf4j-log4j.jar(或類似的東西,我從內存中寫入)添加到類路徑中,當然您需要一個log4j屬性文件。 Logback與log4j非常相似 - 正如我所說他們是由同一個人。 Logback避免了log4j的一些缺點......他從製作log4j中學到了:) – Paul 2012-01-05 03:34:19

0

我用SLF4J-API(JAR)。我用logback-classic替換了依賴(jar)logback-core,然後開始記錄。