2011-12-20 98 views
1

我想做一個簡單的程序,它讀取屬性文件並將輸出記錄到控制檯,但我無法做到這一點。如何使用slf4j讀取.properties文件?

這是我的課:

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

public final class Slf4jSample { 

    public static void main(final String[] args) { 
     final Logger logger = LoggerFactory.getLogger(Slf4jSample.class); 

     logger.info("Hello World!"); 
    } 

    private Slf4jSample() { 
    } 
} 

這是我的屬性文件:

log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 

log4j.logger.Slf4jSample=INFO, A1 

當我運行這一點,給出了這樣的例外:

log4j:WARN No appenders could be found for logger (com.slf4j.Slf4jSample). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
+0

請包括**完整的**堆棧跟蹤。 – 2011-12-20 07:52:31

+0

你的classpath中需要的jar嗎? – hellectronic 2011-12-20 08:00:54

+1

這是從http://stackoverflow.com/questions/8474954/read-properties-file-using-slf4j – oers 2011-12-20 08:19:54

回答

4

「log4j:WARN No appenders could be found ...」消息表明SLF4J與log4j正確綁定,但log4j無法載入您的log4j.properties文件。 SLF4J在這裏不是問題。只需將log4j.properties放置在您的類路徑中即可。

3

考慮到你使用slf4j和log4j作爲基礎日誌庫,並且您的classp上同時擁有slf4j-log4j.jar和log4j.jar然後,您需要指定log4j.properites文件的位置。

Ceki提到將log4j.properties放在你的類路徑上,它應該自動選取它。如果這不適用於您(它應該),或者您需要log4j.properties存在於類路徑之外,那麼在執行代碼時可以將-Dlog4j.configuration=log4j.properties添加到JVM參數中。此變量的值可以是完整路徑,也可以是相對於執行的當前目錄。

例如,在我的IDE exectuing JUnit測試時,我經常在我的運行配置文件添加爲JVM參數,以確保它拿起我的屬性文件,是不是我的Java項目內(即不在類路徑)

-Dlog4j.configuration=file:/C:/java/workspace/logs/log4j.properties