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

Java Gossip: Handler、Formatter

Logger默认的Handler是ConsolerHandler,而ConsolerHandler的讯息等级是INFO,这可以在logging.properties下看到:
handlers= java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level = INFO
 

J2SE 提供了五个默认的 Handler:
  • ConsoleHandler
以 System.err 输出记录。
  • FileHandler
将讯息输出至文件
  • StreamHandler
以 OutputStream 输出记录。
  • SocketHandler
将讯息透过Socket传送至远端主机。
  • MemoryHandler
将讯息暂存在内存中。

下面这个例子示范如何使用FileHandler将讯息输出至文件中:

  • HandlerDemo.java
package onlyfun.caterpillar;

import java.io.IOException;
import java.util.logging.*;

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

try {
FileHandler fileHandler =
new FileHandler("%h/myLogger.log");
logger.addHandler(fileHandler);
logger.info("测试讯息");
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

执行的结果会在主控台显示讯息,并将结果输出至文件中,在指定输出的文件名称时,我们可以使用%h来表示使用者的home目 录,您还可以使用%t取得系统的暂存目录,或者是加入%g,例如可以设定为"%h/myLogger%g.log"表示自动为文件名称编号,文件输出的内 容如下:
<?xml version="1.0" encoding="x-windows-950"
  standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
   <date>2005-02-03T19:49:39</date>
   <millis>1107431379203</millis>
   <sequence>0</sequence>
   <logger>handlerDemo</logger>
   <level>INFO</level>
   <class>onlyfun.caterpillar.HandlerDemo</class>
   <method>main</method>
   <thread>10</thread>
   <message>测试讯息</message>
</record>
</log>
 

Handler负责输出讯息的目的地,而输出的格式则是由Formatter控制,默认上FileHandler的输出格式是XML格式,输出格式是由Formatter来控制,例如FileHandler的默认格式是XMLFormatter,而ConsolerHandler的默认格式是SimpleFormatter,您可以使用Handler的setFormatter()方法来设定讯息的输出格式,例如:
fileHandler.setFormatter(new SimpleFormatter());
 
如果FileHandler设定为SimpleFormatter,则输出的记录档内容与主控台看到的就是相同的内容。