簡體   English   中英

格式化記錄器文件處理程序問題

[英]Formatting Logger File Handler Issue

我正在按照本指南將Logger信息輸出到具有格式化FileHandler的文件。

public class TestLog {

public static Logger logger;

static {
try {
  boolean append = true;
  FileHandler fh = new FileHandler("TestLog.log", append);
  fh.setFormatter(new Formatter() {
     public String format(LogRecord rec) {
        StringBuffer buf = new StringBuffer(1000);
        buf.append(new java.util.Date());
        buf.append(' ');
        buf.append(rec.getLevel());
        buf.append(' ');
        buf.append(formatMessage(rec));
        buf.append('\n');
        return buf.toString();
        }
      });
  logger = Logger.getLogger("TestLog");
  logger.addHandler(fh);
}
catch (IOException e) {
  e.printStackTrace();
}
}

指南顯示輸出將在新行上打印每個新記錄器消息,

Mon Feb 28 21:30:54 EST 2005 SEVERE my severe message
Mon Feb 28 21:30:54 EST 2005 WARNING my warning message
Mon Feb 28 21:30:54 EST 2005 INFO my info message

但是,文件中沒有添加新行,或者它們在StringBuffer上,然后創建了新行,並且以某種方式丟失了該行。 有人可以在這里解釋這個問題嗎? 謝謝。

我的方法/記錄器不是靜態的,這可能引起問題嗎?

我能夠解決問題。 本教程將構建格式化程序,

 fh.setFormatter(new Formatter() {
 public String format(LogRecord rec) {
    StringBuffer buf = new StringBuffer(1000);
    buf.append(new java.util.Date());
    buf.append(' ');
    buf.append(rec.getLevel());
    buf.append(' ');
    buf.append(formatMessage(rec));
    buf.append('\n');
    return buf.toString();
    }
  });

問題在於,這實際上並未在文件中追加新行,而不是使用

buf.append('\n'); 

你需要使用

buf.append(System.getProperty("line.separator"));

我的文件現在可以讀取了,而不是一團糟的連接線。 希望這對以后的人有所幫助。

文件處理程序教程

本教程說明添加消息后必須先刷新然后關閉處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM