java - 使用 java.util.logging 的好例子

标签 java logging java.util.logging

我想在我的程序中使用日志。我听说了java.util.logging ,但我不知道如何开始。

是否有任何示例说明我可以使用日志记录做什么?我将如何在我自己的程序中使用日志记录?

最佳答案

java.util.logging使您不必在应用程序中再携带一个 jar 文件,并且它与一个好的 Formatter 配合得很好。

一般来说,在每个类的顶部,你应该有:

private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );

然后,您就可以使用Logger 的各种功能了。类。


Level.FINE 用于执行流程顶层的任何调试:

LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );

在循环内部以及在调试基本流程问题时可能并不总是需要查看那么多细节的地方使用 Level.FINER/Level.FINEST:

LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );

使用日志工具的参数化版本来避免生成大量的字符串连接垃圾,GC 必须跟上这些垃圾。上面的 Object[] 很便宜,通常在堆栈分配上。


使用异常处理,始终记录完整的异常详细信息:

try {
    ...something that can throw an ignorable exception
} catch( Exception ex ) {
    LOGGER.log( Level.SEVERE, ex.toString(), ex );
}

我总是在这里传递 ex.toString() 作为消息,因为那时我 "grep -n"for "Exception"在日志文件中,我也可以看到该消息。否则,它将在堆栈转储生成的下一行输出中,并且您还必须有一个更高级的 RegEx 来匹配该行,这通常会为您提供比您需要查看的更多的输出。

关于java - 使用 java.util.logging 的好例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5950557/

相关文章:

Java eclipse 突出显示缺少的括号

java - 调用存储过程时,如何通过名称而不是其在 JDBC/JPA 中的位置来设置参数?

java - 如何在 Glassfish 3 上跟踪 SOAP 消息

java - 七月到 SLF4J 桥

java - 我应该将 java.util.logging 的 logging.properties 文件放在 Web 应用程序(maven 项目)中的什么位置?

java - 使用 Java 从文件转换 JSON 对象

java - 我在使用套接字的 java 聊天应用程序上遇到不同的错误

java - Ant 将堆栈跟踪放入标准输出中

java - File.delete() 返回 false

java - LOGGER.error(exception.getMessage()) 和 LOGGER.error(exception.getMessage(), exception) 有什么区别