使用java.util.logging的好例子

时间:2011-05-10 13:11:50

标签: java logging java.util.logging

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

是否有任何关于日志记录的例子?我如何在自己的程序中使用日志记录?

6 个答案:

答案 0 :(得分:311)

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”代表“Exception”时,我也可以看到该消息。否则,它将位于堆栈转储生成的下一行输出中,并且您必须使用更高级的RegEx来匹配该行,这通常会获得比您需要查看的更多输出。

答案 1 :(得分:66)

应该像这样声明记录器:

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

所以,如果你重构你的班级名称,那么就这样了。

我用examples here写了一篇关于java logger的文章。

答案 2 :(得分:49)

有许多示例,也有不同类型的日志记录。请查看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");
  }
}

不对class name进行硬编码:

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");
  }
}

答案 3 :(得分:21)

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

SLF4J支持各种日志记录实现。它可以将所有内容输出到标准输出,使用Log4J或Logback(推荐使用Log4J)。

http://www.slf4j.org/

http://logback.qos.ch/

答案 4 :(得分:9)

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

答案 5 :(得分:0)

我建议您使用Apache的commons日志记录实用程序。它具有高度可扩展性,并支持不同记录器的单独日志文件。 See here