问题

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

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


#1 热门回答(274 赞)

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必须跟上这些垃圾。通常,在堆栈分配上,以上是便宜的4228122623。

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

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

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


#2 热门回答(59 赞)

应该声明这样的记录器:

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

因此,如果你重构你的类名,则遵循。

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


#3 热门回答(46 赞)

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

原文链接