Как использовать собственный обработчик журнала в java.util.logging? - PullRequest
4 голосов
/ 10 августа 2011

Вот что я пытаюсь сделать:

Logger logger = LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Handler handler = new StreamHandler(stream, new SimpleFormatter());
logger.addHandler(handler);
org.slf4j.LoggerFactory.getLogger("com.example").info("foo");
logger.removeHandler(handler);
assert stream.toString().contains("foo");

Это смесь SLF4J и JUL.stream пусто в конце скрипта.Почему?

1 Ответ

0 голосов
/ 24 мая 2014

StreamHandler записывает «заголовок» форматера только в том случае, если запись отформатирована. Условно «голова» и «хвост» пишутся, если обработчик закрыт. Все это указывает на то, что StreamHandler не использовал LogRecord. SimpleFormatter использует пустую строку как для головы, так и для хвоста, что не помогает в устранении неполадок.

  1. Проверьте уровни / приоритеты всех регистраторов, дополнений и обработчиков и убедитесь, что они установлены правильно.
  2. Используйте Logger.getLogger (Logger.GLOBAL_LOGGER_NAME) вместо LogManager.
  3. Используйте статическую конечную ссылку для хранения вашего регистратора.
  4. Call close на вашем обработчике.
  5. Используйте XMLFormatter, чтобы помочь в устранении неполадок, так как у него есть выходные данные головы и хвоста.
  6. Чтение slf4j + java.util.logging: как настроить?
...