logging - 如何使用格式、参数和抛出进行日志记录?

标签 logging slf4j

Logger ,我想我找不到任何使用格式化消息和可抛出的报告的方法。

我发现了

error(String format, Object... arguments) 
error(String msg, Throwable t) 
try {
    doSomething(arg1, arg2);
} catch (final SomeException se) {
    logger.error("Failed to do something with {} and {}", arg1, arg2);
    logger.error("Failed to do something", se);
}

有什么办法可以做到这一点吗?

logger.error("Failed to do something with {} and {}", new Object[]{arg1, arg2}, se);

最佳答案

不要害怕,去做吧! SLF4J 足够聪明。如果您提供的参数多于占位符,记录器将尝试将最后一个参数转换为 Throwable。如果成功,那么您会在日志中得到一个很好的堆栈跟踪。此功能在 SLF4J 版本 1.6.0 中引入 - 请参阅 http://www.slf4j.org/news.html还有http://www.slf4j.org/faq.html#paramException .

像下面这样的用法效果很好:

logger.error("one {} two {} error", new Object[] { 1, 2, new RuntimeException("stack trace") });

从版本 1.7.0 开始,有新的可变参数重载,因此您可以简单地使用

logger.error("one {} two {} error", 1, 2, new RuntimeException("stack trace"));

关于logging - 如何使用格式、参数和抛出进行日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27017043/

相关文章:

c# - 尝试写入事件日志时出错 - 无法打开源 'SourceName' 的日志。您可能没有写入权限

java - NoClassDefFoundError : org/slf4j/impl/StaticLoggerBinder

java - 如何自定义log4j输出

Java:无法关闭 HtmlUnit 日志消息(2016)

java - Log4j 给出关于 slf4j LoggerContext 的 ClassCastException

java - 错误 : package org. slf4j 不存在

java - 无法从 dropwizard 项目中排除 logback-classic 依赖项

java - 使用 jboss/wildfly 10 进行 SLF4J 日志记录

android - 将断言堆栈跟踪保存到文件

sql-server - bigint 对于事件日志表来说足够大吗?