【问题标题】:Printing stacktrace only if level is debug仅在级别为调试时打印堆栈跟踪
【发布时间】:2015-09-29 05:53:14
【问题描述】:

我们维护两个不同的日志文件,一个只记录错误消息,另一个用于调试信息。我不想用异常堆栈跟踪使错误文件混乱,所以每次捕获任何异常时我都必须添加以下两行

try{
  ...
}
catch(Exception e){
   log.error("Error during SOME_SERVICE {}" , e.getMessage());
   log.debug("Exception ", e);
}

有没有更简单的方法可以做到这一点,可能是在一行代码中?

【问题讨论】:

  • 你可以试试这个 log.error("Error during SOME_SERVICE {}" , e);.如果记录器级别是信息,那么它将打印错误消息,否则如果记录器级别是调试,那么它将打印整个跟踪
  • 虽然使用一行而不是两行严格来说可以节省 50% 的空间,但这几乎不是问题。更大的问题是为什么在遇到错误时不记录完整的堆栈跟踪?这并不完全是“混乱”,而是日志文件的用途。至于你原来的问题,我怀疑你可以对日志框架做一些诡计,仅在调试级别打开时打印堆栈跟踪,但为此你需要与记录器交互(并编写多行代码)。
  • @Kayaman 错误记录器仅适用于系统管理员,而调试实际上是为了支持工程师。你的建议很有道理,我要么接受它,要么定义我自己的 Logger

标签: java logging log4j slf4j


【解决方案1】:

正如 cmets 中所建议的,我有两个选择,要么接受它,要么编写我自己的自定义记录器来执行预期的行为。现在,我保持原样。

对于自定义日志有大量的资源,所以不会在这里发布解决方案。

Implement Custom Logger with slf4j

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多