回答
查找下面的一個簡單示例如何使用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");
}
}
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的是寫在Scala,AVSL(一個非常簡單的記錄儀)。
SLF4J適配器
適配器使您可以使用原本不是專爲slf4接口其他日誌框架。至少有兩個可用,one for the java.util.logging framework和another for log4j。
推薦
我強烈推薦slf4j。將界面與各種可能的後端分開的想法對我來說很有意義。尤其是考慮到日誌記錄意味着很多代碼行遍佈全部代碼。能夠在不干擾源代碼的情況下交換後端數據是一種絕佳的奢侈品。此外,slf4j是基於過去的經驗創建的,現在已經很多年了,所以它應該是一個值得信賴的可靠選擇。
如果您有遺留項目使用log4j或java.util.logging,則可以使用適配器爲slf4j安裝新的日誌記錄調用。您可以選擇逐步用新的slf4j調用替換舊的日誌記錄調用,如果您看到需要,您可以自由地最終更改實現。
對於新項目,您可以使用slf4j,並可能選擇Logback作爲後臺實現。知道如果Logback發生故障,您可以輕鬆入睡,輕鬆切換到其他實施。
然而,這裏有更多的選擇。所以你可能想要進一步購物。
- 1. 如何登錄到Redux中的文件?
- 2. 的Java UTIL logging.properties:如何登錄到兩個不同的文件
- 3. 如何使用org.apache.commons.logging登錄到文件?
- 4. 使用Java中的Logger庫登錄到文件中的問題
- 5. grails中的log4j:如何登錄文件?
- 6. 如何移除'?'在java中讀取文件的末尾登錄
- 7. 如何使用Java登錄到站點
- 8. java log4j選擇要登錄的文件
- 9. Zend_Db_Profiler登錄到文件
- 10. GWT登錄到文件
- 11. 如何登錄到brackground「watch」命令中的文件?
- 12. 如何從Java的https網頁登錄並下載文件?
- 13. 如何用Java登錄
- 14. 如何RSA登錄java卡?
- 15. 如何登錄資源文件夾中的文件?
- 16. 登錄Java,未創建文件
- 17. 如何在Java EE中實現登錄?
- 18. 如何在Java中創建登錄
- 19. 如何將登錄的用戶名登錄到URL中?
- 20. 如何在按下按鈕時登錄到文本文件?
- 21. 如何追加登錄到文本文件
- 22. FastMM登錄到沒有FullDebugMode的文件
- 23. 登錄到tomcat上的文件
- 24. 用log4cxx登錄到不同的文件
- 25. 用java登錄到facebook
- 26. 登錄到http網站java
- 27. 如何訪問opencart登錄電子郵件到子文件夾?
- 28. 我如何登錄到Mac上的文件(類似於log4net)
- 29. 如何登錄到python和瓶子web服務器的文件?
- 30. 忽略以「#」開頭的文件中的行登錄Java
你的問題是類似於這個問題..試試這個胎面.. http://stackoverflow.com/questions/15758685/how-to-write-logs-in-text-file-when-using-java- UTIL-日誌記錄器 – Mohit 2014-09-29 11:31:11