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

标签 java logging filehandler

我按照本指南使用格式化的 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/

相关文章:

java - 我想使用 Spring Controller 中的 Iterable 在 JSP 文件中创建和填充列表项

java - 改组 ArrayList 的算法太慢

java - 难以理解的日志记录行为

ruby-on-rails - 使用 ActiveRecord 时 Rails 日志的格式

Java Logger FileHandler 命名约定

java - 连接到网站时出错

java - 错误 “unable to find explicit activity class”

mysql - 跟踪数据库内所有用户流量的最有效方法是什么

java - 关闭 REST API 上的 FileHandler 的最佳方法

java - 获取 Formatter 的调用者类名 [使用文件处理程序进行 Java 日志记录]