大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: Logging 的层级

在进行讯息的记录时,依情节的不同,我们会设定不同等级的讯息输出,您可以透过操作 Logger 的几个方法来得到不同等级的讯息输出,例如:
  • LoggingDemo.java
package onlyfun.caterpillar;

import java.util.logging.*;

public class LoggingDemo {
public static void main(String[] args) {
Logger logger = Logger.getLogger("loggingTest");

logger.severe("严重讯息");
logger.warning("警示讯息");
logger.info("一般讯息");
logger.config("设定方面的讯息");
logger.fine("细微的讯息");
logger.finer("更细微的讯息");
logger.finest("最细微的讯息");
}
}

执行结果:
2005/2/3 下午 07:10:43 onlyfun.caterpillar.LoggingDemo main
严重的: 严重讯息
2005/2/3 下午 07:10:43 onlyfun.caterpillar.LoggingDemo main
警告: 警示讯息
2005/2/3 下午 07:10:43 onlyfun.caterpillar.LoggingDemo main
信息: 一般讯息


依照不同的等级,您可以采用不同的讯息等级方法,程序中依程度高低撰写,注意到 config 以下的讯息并没有显示出来,这是因为 Logger 的默认等级是 INFO,比这个等级更低的讯息,Logger 并不会理会它。

Logger 的默认等级是定义在执行环境的属性档logging.properties中,这个文件位于执行环境安装目录的lib目录下,部份内容如下:
handlers= java.util.logging.ConsoleHandler
.level= INFO
java.util.logging.ConsoleHandler.level = INFO
 

Logger 默认的 Handler 是 ConsolerHandler, 也就是将讯息输出至主控台,一个 Logger 可以维护多个 Handler,每个 Handler 可以有自己的讯息等级,在通过 Logger 的等级限制后,实际上还要再经过 Handler 的等级限制,所以上面的例子中您如果想要看到所有的讯息,则必须同时设定 Logger 与 ConsolerHandler 的等级,例如:
  • LoggingDemo.java
package onlyfun.caterpillar;

import java.util.logging.*;

public class LoggingDemo {
public static void main(String[] args) {
Logger logger = Logger.getLogger("loggingTest");
logger.setLevel(Level.ALL);

ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setLevel(Level.ALL);
logger.addHandler(consoleHandler);

logger.severe("严重讯息");
logger.warning("警示讯息");
logger.info("一般讯息");
logger.config("设定方面的讯息");
logger.fine("细微的讯息");
logger.finer("更细微的讯息");
logger.finest("最细微的讯息");
}
}

执行结果:
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
严重的: 严重讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
严重的: 严重讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
警告: 警示讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
警告: 警示讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
信息: 一般讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
信息: 一般讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
配置: 设定方面的讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
细致: 细微的讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
更细致: 更细微的讯息
2005/2/3 下午 07:22:59 onlyfun.caterpillar.LoggingDemo main
最细致: 最细微的讯息


Level.ALL 表示显示所有的讯息,如果您想要关闭所有的讯息,可以设定为Level.OFF

Logger 的server()、warning()、info()等等的方法,实际上是个便捷的方法,您也可以直接使用log()方法并指定等级来执行相同的作用,例如下面这个程序的执行结果是一样的:

  • LoggingDemo.java
package onlyfun.caterpillar;

import java.util.logging.*;

public class LoggingDemo {
public static void main(String[] args) {
Logger logger = Logger.getLogger("loggingTest");
logger.setLevel(Level.ALL);

ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setLevel(Level.ALL);
logger.addHandler(consoleHandler);

logger.log(Level.SEVERE, "严重讯息");
logger.log(Level.WARNING, "警示讯息");
logger.log(Level.CONFIG, "一般讯息");
logger.log(Level.CONFIG, "设定方面的讯息");
logger.log(Level.FINE, "细微的讯息");
logger.log(Level.FINER, "更细微的讯息");
logger.log(Level.FINEST, "最细微的讯息");
}
}