哪种方法更适合(根据良好的编程)生产以轻松调试错误。
LOG.error("Error message ",e);
OR
LOG.error("Error message "+e);
OR
LOG.error("Error message "+e.getMessage());
答案 0 :(得分:5)
你为什么不试试呢?您是唯一知道您在日志记录中需要哪些信息的人。根据抛出的异常,您可能需要堆栈跟踪。
请参阅下面一个显示不同输出的小例子
private void logTest() {
try {
Files.readAllBytes(Paths.get("foobar"));
} catch (IOException e) {
logger.error("Error message ", e);
logger.error("Error message " + e);
logger.error("Error message " + e.getMessage());
}
}
logger.error(“错误讯息”,e);
2015-10-07 13:42:11,239 [main] ERROR sub.optimal.Main - Error message
java.nio.file.NoSuchFileException: foobar
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at java.nio.file.Files.readAllBytes(Files.java:3152)
at sub.optimal.Main.logTest(Main.java:43)
at sub.optimal.Main.main(Main.java:53)
logger.error(“错误讯息”+ e);
2015-10-07 13:42:11,243 [main] ERROR sub.optimal.Main - Error message java.nio.file.NoSuchFileException: foobar
logger.error(“错误讯息”+ e.getMessage());
2015-10-07 13:42:11,243 [main] ERROR sub.optimal.Main - Error message foobar
答案 1 :(得分:2)
使用LOG.error("Error message ",e);
- 这样你就不会丢失异常的堆栈跟踪(请注意,还需要确保设置日志框架的输出布局,以便打印堆栈跟踪)。 / p>
堆栈跟踪是异常报告的重要组成部分,因为它们会告诉您如何调用违规代码,因此可以帮助您了解错误发生时程序的状态。
如果由于某种原因想要仅记录消息而不是堆栈跟踪,我仍然建议使用上面的表单,然后配置日志框架以不打印堆栈跟踪(在Log4j中,这是通过配置追加程序)。这样,如果您稍后改变主意,可以通过仅更改配置将堆栈跟踪添加到日志中,而无需更改实际的日志记录代码。选择应该放在日志中的信息应该是appender配置的责任,而不是记录条目的代码。
答案 2 :(得分:0)
你也可以使用:
logger.log(Level.INFO, "an exception was thrown", e);
答案 3 :(得分:-1)
在Java中
LOG.error("Error message ",e);
LOG.error("Error message "+e);
您正在传递将调用to String implementation
的异常对象LOG.error("Error message "+e.getMessage());
这将为您提供getMessage的内容