我按照本指南使用格式化的 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"));
我的文件现在是可读的,而不是一堆困惑的连接线。希望这对将来的人有所帮助。
关于java - 格式化记录器文件处理程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17299612/