4

这就是我想要做的:

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在脚本末尾为空。为什么?

4

1 回答 1

0

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

  1. 检查所有记录器、附加程序和处理程序的级别/优先级,并确保它们设置正确。
  2. 使用 Logger.getLogger(Logger.GLOBAL_LOGGER_NAME) 而不是 LogManager。
  3. 使用静态最终引用来保存您的记录器。
  4. 在您的处理程序上调用 close 。
  5. 使用 XMLFormatter 来帮助排除故障,因为它具有头部和尾部输出。
  6. 阅读slf4j + java.util.logging:如何配置?
于 2014-05-23T20:47:06.397 回答