2013-03-08 55 views
0

這可能是顯而易見的,但我一直在尋找使用org.apache.commons.logging一個簡單的例子來登錄到特定的文件(即/path/to/my-log.txt如何使用org.apache.commons.logging登錄到文件?

public class MyClass { 

    static Log log = LogFactory.getLog(MyClass.class); 

    public static void main(String[] args) { 

     // What to do here to get log to output to a file??? 

     log.info("I want to appear in a specific log file") 
    } 

} 
+0

這只是spitballing,但也許建立了一個虛擬的類記錄,並做'靜態登錄日誌= LogFactory.getLog(ThatOtherClass.class);' – corsiKa 2013-03-08 01:16:26

+0

我正在嘗試將輸出寫入一個我可以指定的文件。因此,log.info中的消息將出現在特定文件(即/path/to/my-log.txt)中 – chaimp 2013-03-08 01:19:59

+0

當您說明指定時,是否指的是從程序中動態指定? – corsiKa 2013-03-08 01:28:00

回答

4

這取決於你在你的項目有日誌實現。如果在類路徑中沒有log4j,則commons-logging默認爲java.util.logging。在這種情況下,您需要配置java.util.logging.FileHander。你能做到直通logging.properties文件或程序

Logger.getGlobal().addHandler(new FileHandler("log")); 
    LogFactory.getLog(MyClass.class).info("/path/to/mylog.log"); 
2

共享記錄只是記錄門面,你應該使用Log4j或JDK-Logging執行真正的日誌記錄任務,您可以設置日誌文件。

http://logging.apache.org/log4j/1.2/http://logging.apache.org/log4j/2.x/

它的配置文件會喜歡:

log4j.rootLogger=info, stdout, R 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p %d{yy-MM-dd HH:mm:ss} %c:%L - %m%n 
log4j.appender.R.File=/path/to/mylog.log 
+0

我該如何在代碼內部做到這一點?假設我將運行jar的用戶的參數傳遞給特定的日誌文件。在上面的代碼示例中,我該如何說日誌輸出應該去「/path/to/mylog.log」?有沒有辦法指定一個日誌文件處理程序? 我知道在Python中這是非常簡單的。在Java中它不是那麼簡單嗎? – chaimp 2013-03-08 03:13:18