2014-09-29 58 views
0

如何使用Java Logger將寫入磁盤的日誌(錯誤,信息日誌和基準測試)創建爲文件?我想每條日誌條目都在一行上。如何登錄到Java中的文件?

預先感謝您。

+1

你的問題是類似於這個問題..試試這個胎面.. http://stackoverflow.com/questions/15758685/how-to-write-logs-in-text-file-when-using-java- UTIL-日誌記錄器 – Mohit 2014-09-29 11:31:11

回答

0

查找下面的一個簡單示例如何使用Java核心java.util.logging.Logger。如果沒有強制性的理由使用它,我建議你看看其中一個Java日誌框架(他們大多數時候更容易配置)。

package sub.optimal.logger; 

import java.io.PrintWriter; 
import java.io.StringWriter; 
import java.util.Date; 
import java.util.logging.Formatter; 
import java.util.logging.LogRecord; 

public class CustomFormatter extends Formatter { 

    private static final String format = "%1tH:%<tM:%<tS %2$-7s %3$s (%4$s) %5$s%6$s%n"; 
    private static final Date date = new Date(); 

    @Override 
    public String format(LogRecord record) { 
     date.setTime(record.getMillis()); 
     String source = ""; 
     if (record.getSourceClassName() != null) { 
      source = record.getSourceClassName(); 
      if (record.getSourceMethodName() != null) { 
       source += " " + record.getSourceMethodName(); 
      } 
     } 
     String message = formatMessage(record); 
     String throwable = ""; 
     if (record.getThrown() != null) { 
      StringWriter sw = new StringWriter(); 
      PrintWriter pw = new PrintWriter(sw); 
      pw.println(); 
      record.getThrown().printStackTrace(pw); 
      pw.close(); 
      throwable = sw.toString(); 
     } 
     return String.format(format, 
       date, 
       record.getLevel().getName(), 
       record.getLoggerName(), 
       source, 
       message, 
       throwable); 
    } 
} 

package sub.optimal.logger; 

import java.io.IOException; 
import java.util.logging.FileHandler; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/** 
* 
* @author SubOptimal 
*/ 
public class Main { 

    public static void main(String[] args) throws Exception { 
     new Main().loggerDemo(); 
    } 

    private void loggerDemo() throws IOException, SecurityException { 
     Logger logger = Logger.getLogger("MyLogger"); 
     // don't forward any logging to this logger to his parent 
     logger.setUseParentHandlers(false); 
     // log messages of all level 
     logger.setLevel(Level.ALL); 

     // define the logfile 
     FileHandler fh = new FileHandler("my_log_file.log"); 
     logger.addHandler(fh); 

     // a Formatter with a custom format 
     CustomFormatter formatter = new CustomFormatter(); 
     fh.setFormatter(formatter); 

     // few logging examples 
     logger.config("message as logger.config"); 
     logger.fine("message as logger.fine"); 
     logger.finer("message as logger.finer"); 
     logger.finest("message as logger.finest"); 
     logger.info("message as logger.info"); 
     logger.severe("message as logger.severe"); 
     logger.warning("message as logger.warning"); 
    } 
} 
0

Java世界提供了各種框架選擇來幫助處理日誌記錄。

日誌記錄可能會變得複雜。您可能需要禁用或啓用各種嚴重級別的日誌消息。您可能希望在開發期間配置日誌記錄以連接到IDE中的控制檯,同時針對測試進行不同的配置,但對於生產又進行了不同的配置。您可能需要登錄到文本文件,到message queues,到數據庫,觸發電子郵件或短信,發出警報燈,誰知道什麼。靈活的日誌框架可以幫助完成所有這些。

java.util.logging中

一個捆綁與Java 4和以後,在java.util.logging包。 This other answer涵蓋此選項。在Oracle網站上討論here。雖然很有用,但許多人認爲這並不理想。

log4j的

也許最有名的是log4j。這個框架是第一個發明的強大靈活的日誌記錄框架。該產品是originally published by IBM,後來捐贈給Apache基金會。

SLF4J &的logback

之一的log4j的主要發明者,CekiGülcü,把自己學到了什麼從該項目再次從頭開始。結果是一對產品。一個是slf4j,是一個用於日誌記錄的界面,在單獨的實現前用作façade。實際上,slf4j包含一個非常簡單的實現,名稱爲SimpleLogger,但您可能希望在生產環境中使用其他支持實現。

的logback

其他項目由Gülcü推出爲Logback。該產品直接實現了slf4j接口。 Logback功能全面且功能強大。把它看作是下一代log4j,但新鮮和重新設計。 Gülcü一起構建了slf4j和Logback,每個都影響另一個,意圖成爲一個很好的組合。

但是,您Logback不是您唯一的選擇。這是創建slf4j的唯一目的,在代碼中只使用slf4j調用時可以選擇實現。這樣,您可以更改後臺實現,而無需對整個項目源代碼中的所有日誌記錄調用進行任何更改。

AVSL

另一個直接實現SLF4J的是寫在ScalaAVSL(一個非常簡單的記錄儀)。

SLF4J適配器

適配器使您可以使用原本不是專爲slf4接口其他日誌框架。至少有兩個可用,one for the java.util.logging frameworkanother for log4j

推薦

我強烈推薦slf4j。將界面與各種可能的後端分開的想法對我來說很有意義。尤其是考慮到日誌記錄意味着很多代碼行遍佈全部代碼。能夠在不干擾源代碼的情況下交換後端數據是一種絕佳的奢侈品。此外,slf4j是基於過去的經驗創建的,現在已經很多年了,所以它應該是一個值得信賴的可靠選擇。

如果您有遺留項目使用log4j或java.util.logging,則可以使用適配器爲slf4j安裝新的日誌記錄調用。您可以選擇逐步用新的slf4j調用替換舊的日誌記錄調用,如果您看到需要,您可以自由地最終更改實現。

對於新項目,您可以使用slf4j,並可能選擇Logback作爲後臺實現。知道如果Logback發生故障,您可以輕鬆入睡,輕鬆切換到其他實施。

然而,這裏有更多的選擇。所以你可能想要進一步購物。