0

このガイドに従って、フォーマットされた 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 にあり、新しい行が作成されて何らかの形で失われています。誰かがここで問題を説明できますか? ありがとう。

私のメソッド/ロガーは静的ではありません。これが問題の原因になっている可能性はありますか?

4

2 に答える 2

2

問題を解決できました。チュートリアルでは、フォーマッタをそのように構築します。

 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"));

私のファイルは、接続された行の混乱ではなく、読み取り可能になりました。これが将来誰かに役立つことを願っています。

于 2013-06-25T14:34:55.303 に答える