Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日志记录异常,请使用getMessage或toString:log.warn(ex.getMessage())或log.warn(ex)与开源一起工作_Java_Exception_Logging - Fatal编程技术网

Java日志记录异常,请使用getMessage或toString:log.warn(ex.getMessage())或log.warn(ex)与开源一起工作

Java日志记录异常,请使用getMessage或toString:log.warn(ex.getMessage())或log.warn(ex)与开源一起工作,java,exception,logging,Java,Exception,Logging,我的问题是:最好使用getMessage或toString或两者都使用?考虑开放源代码引发的错误。在评论中看到了问题,但没有得到答案。也许我错过了什么?不要介意记录其中一个对性能的影响很小,但除非有充分的理由,否则不要同时记录这两个 意思是log(ex)或log(ex.getMessage),而不是堆栈跟踪 锯,和 记录异常:哪一个更好: log.warn(例如getMessage(),ex)或log.warn(例如,ex) 我注意到有时候getMessage返回空或null,所以在一般实践中,

我的问题是:最好使用getMessage或toString或两者都使用?考虑开放源代码引发的错误。在评论中看到了问题,但没有得到答案。也许我错过了什么?不要介意记录其中一个对性能的影响很小,但除非有充分的理由,否则不要同时记录这两个

意思是log(ex)或log(ex.getMessage),而不是堆栈跟踪

锯,和

记录异常:哪一个更好: log.warn(例如getMessage(),ex)或log.warn(例如,ex)

我注意到有时候getMessage返回空或null,所以在一般实践中,有什么理由不使用:

log.warn(ex, ex);
因为它似乎打印类名和消息(如果设置)?我想一个原因可能是,如果一个子类过度使用字符串而不打印消息,但实际上hibernate、apache或spring LIB中有没有这样做的?

log.warn("some descriptive message, maybe with context {}", 
    someId, ex);
异常详细信息已经作为stacktrace的一部分打印出来,因此通常不需要在消息中包含它们


如果您想要抑制stacktrace并只打印异常消息,通常,
ex.toString()
ex.getMessage()
工作得更好,因为它还包含异常类名,而消息没有。事实上,消息通常是空的(例如带有NullPointerExceptions)。

可能重复的请参见两个链接的问题(这使此问题重复),我认为答案两者都不是。仅记录指示错误的异常的堆栈跟踪;它们只对程序员有用;bug的存在不仅仅是一种警告。不要在lig消息(而不是OROMGRAMERS用户)中使用异常的消息文本。请参阅通读所有链接的问题-它们绝对不是重复的…是的,已经这样做了,打印本地变量等并使用AOP作为方法参数,更多的是关于异常本身toStirng或getMessage还是两者?更新的问题如果您想将问题改为
log.warn(ex)
vs
log.warn(例如getMessage())
(只有这两个选项),然后是:我投票支持第一个选项。这包括消息,如指定的,是否有人可以覆盖它以使其不那么有用?我想是吧。但我从未见过这种情况发生。你能编辑你的答案只是为了谈论异常getMessage和toString吗?答案确实有一点误导,因为通常认为在记录行之后只记录stacktrace就足够了。因为在许多情况下,您需要在第一个记录行上已经有异常详细信息,以便能够有效地查找错误,例如。G使用
grep
等工具按异常名称搜索记录的行时。