我想在我的程序中使用日志。我听说过java.util。但是我不知道如何开始。
有什么例子可以说明我可以用日志做什么吗?如何在自己的程序中使用日志?
我想在我的程序中使用日志。我听说过java.util。但是我不知道如何开始。
有什么例子可以说明我可以用日志做什么吗?如何在自己的程序中使用日志?
有许多不同类型的日志示例。看一下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");
}
}
应该像这样声明记录器:
private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());
所以如果你重构你的类名,它会跟着。
我写了一篇关于java记录器的文章,并在这里给出了示例。
java.util.logging使您不必在应用程序中携带更多的jar文件,并且它与良好的Formatter一起工作。
一般来说,在每门课的前几名,你应该有:
private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );
然后,您可以使用Logger类的各种功能。
使用水平。FINE用于在执行流的顶层进行调试:
LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );
使用水平。精细/水平。循环内部的FINEST,以及在调试基本流问题时可能不总是需要看到那么详细信息的地方:
LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );
使用日志记录工具的参数化版本可以避免生成GC必须处理的大量字符串连接垃圾。对象[]与上面一样是廉价的,通常在堆栈分配上。
使用异常处理,总是记录完整的异常细节:
try {
...something that can throw an ignorable exception
} catch( Exception ex ) {
LOGGER.log( Level.SEVERE, ex.toString(), ex );
}
我总是传递ex.toString()作为这里的消息,因为当我在日志文件中“grep -n”为“Exception”时,我也可以看到消息。否则,它将在堆栈转储生成的下一行输出上,并且您必须使用更高级的RegEx来匹配该行,这通常会获得比您需要查看的更多输出。