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

Я следую этому руководству для вывода информации регистратора в файл с отформатированным 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, а затем создается новая строка, которая каким-то образом теряется. Может кто-нибудь объяснить проблему здесь? Спасибо.

Мой метод / регистратор не статичен, может ли это быть причиной проблемы?


person PandaBearSoup    schedule 25.06.2013    source источник
comment
Какую проблему вы пытаетесь решить? Выведите то, что вы хотите достичь, его функции по умолчанию для фреймворка ведения журнала, что вам нужно для установки шаблона вывода.   -  person Subhrajyoti Majumder    schedule 25.06.2013
comment
Новые строки в файл не добавляются, все в одной строке. Это проблема для удобочитаемости.   -  person PandaBearSoup    schedule 25.06.2013
comment
Вы пишете фреймворк для ведения логов!   -  person Subhrajyoti Majumder    schedule 25.06.2013
comment
Насколько я знаю, вы можете объяснить, что это значит?   -  person PandaBearSoup    schedule 25.06.2013


Ответы (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"));

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

person PandaBearSoup    schedule 25.06.2013

Руководство по обработке файлов

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

person Zeh    schedule 25.06.2013
comment
Я сбрасываю обработчик после каждого входа в систему и закрываю обработчик перед закрытием приложения. - person PandaBearSoup; 25.06.2013
comment
Извините, я совершенно не понял ваш вопрос. Я думал, что к тексту вообще не добавляется ни одной строчки, а не только новые строки. Тем не менее, хорошая работа по поиску ответа! - person Zeh; 25.06.2013