import java.io.IOException; import java.util.logging. * ; import java.util.Date; class HTMLFormatter extends Formatter // 自定义一个HTML的日志输出格式 ... { public String format(LogRecord record) //必须实现Formatter 中的format方法 ...{ return("<tr><td>" + (new Date(record.getMillis())).toString() + "</td>" + "<td>" + record.getMessage() + "</td></td> "); } //重写getHead(Handler)和getTail(Handler)方法,作为输出格式的头尾。 public String getHead(Handler h) ...{ return ("<html> " + "<body> " + "<table border> " + "<tr><th>Time</th><th>Log Message</th></tr> "); } public String getTail(Handler h) ...{ return ("</table> " + "</body> " + "</html>"); }} public class LoggingExample2 ... { public static void main(String[] args) ...{ try ...{ //生成一个日志管理器 LogManager lm = LogManager.getLogManager(); Logger parentLogger,childLogger; //定义两种形式的输出对象。这里的输出对象可以是文件(FileHandler)、控制台(ConsoleHandler)、TCP/IP流(SocketHandler)[都继承与StreamHandler],内存(MemeryHandler)等。 FileHandler xml_handler = new FileHandler("log_output.xml"); FileHandler html_handler = new FileHandler("log_output.html"); //生成父子的日志对象,子日志会传递给父日志 parentLogger = Logger.getLogger("ParentLogger"); childLogger = Logger.getLogger("ParentLogger.ChildLogger"); //向日志管理器中添加父子日志 lm.addLogger(parentLogger); lm.addLogger(childLogger); //为父子日志对象定义不同的日志级别。 parentLogger.setLevel(Level.WARNING); childLogger.setLevel(Level.ALL); //为两种形式的输出定义格式 xml_handler.setFormatter(new XMLFormatter()); html_handler.setFormatter(new HTMLFormatter()); //为父子日志对象添加输出 parentLogger.addHandler(xml_handler); childLogger.addHandler(html_handler); //开始向子日志对象输出日志 childLogger.log(Level.FINE,"This is a fine log message"); childLogger.log(Level.SEVERE, "This is a severe log mesage"); //关闭日志输出对象 xml_handler.close(); html_handler.close(); } catch (SecurityException e) ...{ System.out.println(e); e.printStackTrace(); } catch (IOException e) ...{ System.out.println(e); e.printStackTrace(); } } }