Logger预设的Handler是ConsolerHandler,而ConsolerHandler的讯息等级是INFO,这可以在logging.properties下看到:
handlers= java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level = INFO
J2SE 提供了五个预设的 Handler:
下面这个例子示范如何使用FileHandler将讯息输出至档案中:
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>
预设上FileHandler的输出格式是XML格式,输出格式是由Formatter来控制,例如FileHandler的预设格式是XMLFormatter,而ConsolerHandler的预设格式是SimpleFormatter,您可以使用Handler的setFormatter()方法来设定讯息的输出格式,例如:
fileHandler.setFormatter(new SimpleFormatter());
如果FileHandler设定为SimpleFormatter,则输出的记录文件内容与主控台看到的就是相同的内容。