Проблема с обработчиком файлов форматирования

Я следую этому руководству, чтобы вывести информацию 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 ответа

Решение

Я смог решить проблему. Учебник создает форматтер как таковой,

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

Мой файл теперь читается, а не беспорядок связанных линий. Надеюсь, это поможет кому-то в будущем.

Filehandler Tutorial

Этот урок показывает, что вы должны очистить, а затем закрыть обработчик после добавления сообщения.

Другие вопросы по тегам