使用java.util.logging的好例子

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

有什么我能用logging做什么的例子? 我如何使用我自己的程序日志logging?

java.util.logging让你不必再携带一个jar文件到你的应用程序中,而且它可以很好地与一个格式化器配合使用。

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

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

然后,您可以使用Logger类的各种设施。


对于在执行stream程顶层进行debugging的任何东西,请使用Level.FINE

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

在循环内部使用Level.FINER / Level.FINEST ,在debugging基本stream程问题时,您可能并不总是需要查看更多细节。

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

使用日志工具的参数化版本来防止产生大量的string连接垃圾,GC将不得不跟上。 Object[]如上所述便宜,通常在堆栈分配上。


通过exception处理,始终logging完整的exception详细信息:

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

我总是在这里传递ex.toString()作为消息,因为那么当我在日志文件中的“ Exception ”中使用“ grep -n ”时,我也可以看到这个消息。 否则,它将位于堆栈转储生成的输出的下一行,并且您必须具有更高级的RegEx才能匹配该行,这往往会让您获得比您需要查看更多的输出。

应该这样声明logging器:

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

所以如果你重构你的class级名称如下。

我在这里用例子写了一篇关于javalogging器的文章。

有很多例子,也有不同types的日志logging。 看看java.util.logging包。

示例代码:

 import java.util.logging.Logger; public class Main { private static Logger LOGGER = Logger.getLogger("InfoLogging"); public static void main(String[] args) { LOGGER.info("Logging an INFO-level message"); } } 

没有硬编码的类名称 :

 import java.util.logging.Logger; public class Main { private static final Logger LOGGER = Logger.getLogger( Thread.currentThread().getStackTrace()[0].getClassName() ); public static void main(String[] args) { LOGGER.info("Logging an INFO-level message"); } } 

SLF4J是比Apache Commons Logging(ACL)更好的日志logging外观。 它可以连接到其他日志框架,通过SLF4J直接调用ACL,Log4J或Java Util日志logging,以便您可以根据需要将所有输出定向到一个日志文件,只需一个日志configuration文件。 为什么你的应用程序会使用多个日志框架? 因为您使用的第三方库,特别是较旧的库,可能会这样做。

SLF4J支持各种日志logging实现。 它可以输出一切标准输出,使用Log4J或Logback(推荐使用Log4J)。

http://www.slf4j.org/

http://logback.qos.ch/

我会亲自使用minlog 。 这非常简单,因为日志logging类是几百行代码。

我build议你使用Apache的公共日志logging工具。 它具有高度的可扩展性,支持不同logging器的单独日志文件。 看到这里 。