ITEEDU

入门准备

接触对象

对象导向

资源管理

对象容器(Container)

输入输出(I/O)

执行绪(Thread)

反射(Reflection)

metadata

数据库(JDBC)

舍遗补缺

Java Gossip: 简介 Logging

程序中不免会出现错误,当错误发生时,您可以使用System.err.println()或是 System.out.println()在主控台 (Console)显示讯息给使用者,如果是在窗口程序中,可能是使用消息框,如果是在网页程序中,则显示一个错误讯息页面,除了提供错误讯息之外,您还可能想将错误讯息以某种方式储存下来,以供使用者或是程序人员debug时使用。

在Java中的java.util.logging套件提供了一系列的logging工具,如果您只是要简单的记录一些讯息,就可以使用 它,这些logging工具在J2SE 1.4之后加入了Java标准中,不必额外配备logging组件就可以运行于标准的Java平台上是它的好处。

像是简单的主控台讯息显示或是记录档案的输出,java.util.logging下都提供了一些预设的工具,您不必亲自撰写这些工具。

来看一个简单的例子,假设您的程序在启动时必须提供参数,如果使用者没有提供参数,则必须显示警示讯息:

LoggingDemo.java
package onlyfun.caterpillar;
import java.util.logging.*;
public class LoggingDemo {
	public static void main(String[] args) {
		Logger logger = Logger.getLogger("LoggingDemo");
		try {
			System.out.println(args[0]);
		}
		catch(ArrayIndexOutOfBoundsException e) {
			logger.warning("没有提供执行时的自变量!");
		}
	}
}

执行结果:

2005/2/3 上午 10:50:54 onlyfun.caterpillar.LoggingDemo main
警告: 没有提供执行时的自变量!?

如上所示的,您简单的透过Logger的静态方法getLogger()取得Logger对象,之后就可以运用它的方法进行讯 息输出,预设是从主控台输出讯息,除了您提供的讯息之外,Logger还自动帮您收集了相关的讯息,像是类别与套件名称,执行该段程序的执行绪名称以及讯 息产生的时间等,这比下面这个程序所提供的讯息丰富的多了。

LoggingDemo.java
package onlyfun.caterpillar;
public class LoggingDemo {
	public static void main(String[] args) {
		try {
			System.out.println(args[0]);
		}
		catch(ArrayIndexOutOfBoundsException e) {
			System.err.println("没有提供执行时的自变量!");
		}
	}
}

您不用亲自实作,直接使用 java.util.logging 工具,就可以拥有一些预设的记录功能,作为中大型系统来说,java.util.logging 工具可能不足,但作为一个简单的记录工具,java.util.logging 是个可以考虑的对象。