如何在java异常处理中记录错误。

时间:2015-10-07 11:31:19

标签: java exception-handling

哪种方法更适合(根据良好的编程)生产以轻松调试错误。

LOG.error("Error message ",e);

OR

LOG.error("Error message "+e);

OR

LOG.error("Error message "+e.getMessage());

4 个答案:

答案 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的内容