格式化记录器文件处理程序问题

时间:2013-06-25 14:10:39

标签: java logging filehandler

我按照本指南将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上,然后创建一个新行并以某种方式丢失。有人可以解释这个问题吗?感谢。

我的方法/记录器不是静态的,这会导致问题吗?

2 个答案:

答案 0 :(得分: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"));

我的文件现在是可读的,而不是乱七八糟的连线。希望这可以帮助将来的某个人。

答案 1 :(得分:1)

Filehandler Tutorial

本教程显示您必须在添加消息后刷新然后关闭处理程序。