【问题标题】:how to insert exception stacktrace to log如何将异常堆栈跟踪插入日志
【发布时间】:2021-03-18 11:17:36
【问题描述】:

我有这样的代码:

catch (Exception ex) {
            // Log the error
            ex.printStackTrace();
            logger.error("Error in Best Quote Thread: " +  ex); 
        }

是的,我的日志中出现这样的错误: 2020-12-07 11:27:56 错误 FixProtocolConvert:162 - 修复协议转换线程中的错误:java.lang.NullPointerException

}catch (Exception ex) {
            // Log the error
            ex.printStackTrace();
            logger.error("Error in FixProtocolConvert: " ,  ex); 
        }

我也必须尝试使用​​此代码,但我只能这样: 2020-12-07 14:09:52 错误 FixProtocolConvert:325 - 修复协议转换线程中的错误:java.lang.NullPointerException java.lang.NullPointerException

如何得到这个错误的准确位置?像 ex.printstacktrace 的这个例子。所以我需要将 ex.printstacktrace 的值记录到我的记录器中

com.abcd.core.datafeed.fixProtocol(FixProtocolConvert.java:121)
        at 

我的问题是如何得到这个错误的确切位置?因为如果我使用该代码只会得到这样的日志...... 谢谢大家

【问题讨论】:

  • 你用的是什么记录器?
  • 其次,不要同时使用printStackTrace()和Logger。
  • 一些记录器(例如slf4j)将异常识别为参数并对其进行特殊处理,因此请尝试logger.error("Error in Best Quote Thread", ex);。但正如@Glains 所问,您使用的是哪个记录器?
  • 我刚刚创建了一些我使用它的方法 - System.err.println("Some error occurred "+e.getMessage()); //例如:发生了一些错误/零
  • 我使用 Logger 使用 Slf4j cc @Glains@tgdavies

标签: java


【解决方案1】:

如果是适当的子类,传递给任何日志方法的最后一个参数(info、warn、...)将被解释为 Exception。

try {
    operationThatCanFail();
catch (Exception e) {
    LOG.error("Operation failed", e); // <-- exception passed as last param 
}

如果需要使用附加参数:

try {
    operationThatCanFail();
catch (Exception e) {
    LOG.error("First {} Third {}", "Second", "Fourth", e);
}

另外,不要将e.printStackTrace() 与Logger 一起使用。使用一种形式的日志记录就足够了。更喜欢使用Logger 而不是System.err,printStackTrace() 使用它。

相关问题:

【讨论】:

  • 对于您的示例"First {} Thrid {}", "Second", "Fourth",将哪些参数扩展为该字符串,以及如何扩展?
  • {} 充当占位符,因此它解析为类似 ERROR [...] - First Second Third Fourth java.lang.NullPointerException [...] .
  • printStackTrace() 使用 System.err,而不是 System.out。
  • @VGR 你是对的,我已经编辑了相关部分。下次,您可以自己提出修改建议。
  • @Glains - 有道理。我第一次读错了你的例子......认为所有“第一,第二,第三,第四”都是占位符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2011-01-05
  • 2015-03-17
  • 1970-01-01
  • 2017-08-06
  • 2010-09-13
相关资源
最近更新 更多