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();
}
}
}