2011-12-12 140 views
4

我想使用slf4j從.properties文件讀取數據,我可以在控制檯上輸出數據,但我想要的是輸出某些文件上的數據,所以我需要文件Appender這是在.properties文件中聲明的,我無法使用slf4j讀取.properties文件。任何人都可以幫助。 PS:我需要一個例子來說明如何在slf4j中使用.properties文件,以及如何初始化記錄器工廠。使用slf4j讀取.properties文件

+0

您正在使用哪個slf4j實現?例如log4j,logback? – artbristol

回答

1

slf4j是一個API--如果你認爲它只包含接口而沒有類,那麼你就不遠了。

您需要的行爲是在接口的實現中,對於slf4j可能是logback,AVSL,JDK14(java.util.logging),log4j或Simple。有些可以讀取屬性,有些則不能。

的logback對於您可以使用

<property file="src/main/java/chapters/configuration/variables1.properties" /> 

詳見http://logback.qos.ch/manual/configuration.html#definingProps

3

如果使用log4j,也可以使用「Log4jLoggerAdapter」,定義.properties文件中的配置。 下面的代碼。

所需罐子:

slf4j-api-1.7.5.jar 
slf4j-log4j12-1.7.5.jar 

If desired the source code (useful when debugging): 
slf4j-api-1.7.5-sources.jar 
slf4j-log4j12-1.7.5-sources.jar 

測試java類:

import org.apache.log4j.PropertyConfigurator; 
import org.slf4j.LoggerFactory; 
import org.slf4j.impl.Log4jLoggerAdapter; 


public class Slf4j_log4j_main { 

    private static Log4jLoggerAdapter log = (Log4jLoggerAdapter) LoggerFactory.getLogger(Slf4j_log4j_main.class); 

    public static void main(String[] args) { 
     PropertyConfigurator.configure(Slf4j_log4j_main.class.getClassLoader().getResource("basic/log4j.properties")); 
     log.debug("a debug"); 
     log.info("an info"); 
     log.warn("a warn"); 
     log.error("an error"); 
     //log.fatal("a fatal"); // slf4j misses fatal log. 
     log.trace("a fatal"); 
     System.out.println(""); 
     System.out.println("[INFO]: done"); 
    } 
} 

基本/ log4j.properties

#@FROM: log4j_slf4j.basic 
#@BASED: [BIN319P17]/[BIN319P42] 
#using your own named logger. 

# defining appender file 
log=/home/alsdias/work/dev/java/lab/slf4j/log4j/log4j_slf4j/src/basic 

# root logger setup 
log4j.rootLogger = DEBUG, A1, FILE 

#setting your own named logger. If more loggers, set additivity false (below) 
log4j.logger.log4j.level=INFO,A1 
log4j.additivity.log4j.level=false 

# console appender config 
log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 

# Print the date in ISO 8601 format 
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 

# file appender config 
log4j.appender.FILE=org.apache.log4j.FileAppender 
log4j.appender.FILE.File=${log}/log.out 

#setting the immediate flush to true (default) 
log4j.appender.FILE.ImmediateFlush=true 
#setting the threshold 
log4j.appender.FILE.Threshold=debug 
#setting the append to false, overwrite 
log4j.appender.FILE.Append=false 

#set a layout for the appender 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.conversionPattern=%d [%t] %-5p %c - %m%n 

所生成的輸出:

2013-06-14 11:47:00,473 [main] DEBUG basic.Slf4j_log4j_main - a debug 
2013-06-14 11:47:00,474 [main] INFO basic.Slf4j_log4j_main - an info 
2013-06-14 11:47:00,474 [main] WARN basic.Slf4j_log4j_main - a warn 
2013-06-14 11:47:00,475 [main] ERROR basic.Slf4j_log4j_main - an error 

[INFO]: done 
+0

非常感謝。這就像,我必須與誰談談才能獲得樣本屬性文件Internet? – barclay