如何在java.util.logging中使用自定义日志处理程序?

时间:2011-08-09 21:45:33

标签: java slf4j java.util.logging

这就是我要做的事情:

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 :(得分:0)

如果格式化了记录,StreamHandler只会写格式化程序“head”。有条件地,如果处理程序关闭,则会写入“head”和“tail”。所有这些似乎都表明StreamHandler没有使用LogRecord。 SimpleFormatter对头部和尾部都使用空字符串,因此无法帮助进行故障排除。

  1. 检查所有记录器,追加器和处理程序的级别/优先级,并确保它们设置正确。
  2. 使用Logger.getLogger(Logger.GLOBAL_LOGGER_NAME)代替LogManager。
  3. 使用static final reference来保存记录器。
  4. 致电处理程序关闭。
  5. 使用XMLFormatter帮助排除故障,因为它有头尾输出。
  6. 阅读slf4j + java.util.logging: how to configure?
相关问题