使用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)。
我会亲自使用minlog 。 这非常简单,因为日志logging类是几百行代码。
我build议你使用Apache的公共日志logging工具。 它具有高度的可扩展性,支持不同logging器的单独日志文件。 看到这里 。