Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 格式化记录器文件处理程序问题_Java_Logging_Filehandler - Fatal编程技术网

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

Java 格式化记录器文件处理程序问题,java,logging,filehandler,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

我按照本指南将记录器信息输出到带有格式化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"));

我的文件现在是可读的,而不是混乱的连接线。希望这对将来的人有所帮助。

我解决了这个问题。本教程将构造格式化程序

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

我的文件现在是可读的,而不是混乱的连接线。希望这对将来的人有所帮助。

您想解决什么问题?输出您想要实现的内容,日志框架的默认功能,设置输出模式所需的内容。文件中没有追加新行,所有内容都在一行上。这是一个可读性问题。您正在编写日志框架吗!据我所知,你能解释一下这是什么意思吗?你想解决什么问题?输出您想要实现的内容,日志框架的默认功能,设置输出模式所需的内容。文件中没有追加新行,所有内容都在一行上。这是一个可读性问题。您正在编写日志框架吗!我不知道,你能解释一下这是什么意思吗?我每次登录后都会刷新处理程序,在关闭应用程序之前关闭处理程序。对不起,我完全误解了你的问题。我认为文本中根本没有添加任何行,不仅仅是新的行。不过,找到答案真是太好了!我在每次登录后刷新处理程序,并在关闭应用程序之前关闭处理程序。对不起,我完全误解了你的问题。我认为文本中根本没有添加任何行,不仅仅是新的行。不过,找到答案真是太好了!