1.簡介:
ava.util.logging,它可以對程序中的日志記錄進行相當復雜的控制。例如:通過它可以指定日志的級別和日志的位置(控制臺、文件、套接字、 內存緩沖區),也可以創建子記錄器,通過它可以用程序控制的方式來指定想記錄的內容,也可以使用配置文件來指定,而不需要去改動程序。
2.體系:
3.實例:
import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.Handler;
import java.util.logging.FileHandler;
import java.io.IOException;
public class LogDemo3 {
static Logger logger = Logger.getLogger("");
public static void main(String arg[]) {
try {
FileHandler fh = new FileHandler("logfile");
logger.addHandler(fh);
} catch(IOException e) {
System.err.println("Cannot open log file for output");
}
Handler handler[] = logger.getHandlers();
for(int i=0; i<handler.length; i++)
handler[i].setLevel(Level.FINEST);
logger.setLevel(Level.FINEST);
LogDemo3 ld = new LogDemo3();
ld.demonstrate();
}
LogDemo3() {
logger.info("LogDemo3 instantiated.");
}
public void demonstrate() {
logger.fine("Entering the demonstrate method.");
for(int i=0; i<10; i++) {
logger.finest("Loop counter: " + i);
}
logger.fine("Exiting the demonstrate method.");
}
}
4.技巧(轉載)
java . util . logging 包提供了強大的日志輸出功能,正確和有效的使用這些功能需要一些技巧:
- 了解不同的 Level , Level .FINE , LEVEL .FINER , LEVEL .FINEST 用來調試和跟蹤程序,比如打印一些調試信息,異常等。 Level .INFO 將打印信息到控制臺。
- 使用 Logger.isLoggable( Level ) 方法檢測當前的 Level ,以此來判斷是否輸出日志,日志也應該遵循需要時才輸出的原則,避免生成大量的調試信息字符串,占用系統內存,影響性能。
- 必要時程序化的打開和關閉日志,例如在開發程序時開啟大部分日志,為了查錯和調試程序,在程序發布時關閉大部分日志,避免影響客戶和影響程序性能。
- 必要時可以針對一個模塊使用唯一的 Logger ,也就是創建 Logger 時傳入子模塊的名字,所有類使用同一個 Logger ,避免生成太多的 Logger 實例。
- 下邊是使用日志工具的一段代碼:
import java .io.IOException;
import java . util . logging .ConsoleHandler;
import java . util . logging .FileHandler;
import java . util . logging . Level ;
import java . util . logging .Logger;
import java . util . logging .SimpleFormatter;
/**
*/
public class LoggerTest{
// 構建Logger
private static Loggerlog = Logger.getLogger(LoggerTest. class .getName());
/** CreatesanewinstanceofLoggerTest */
public LoggerTest(){
// 使用此方法避免生成需要輸出的字符串
if (log.isLoggable( Level .FINE)){
log.log( Level .FINE, " startconstructing... " );
}
}
/**
*設置指定包的日志輸出級別.
*
* @param packageName指定的包
* @param fileName指定日志的輸出文件
* @param level 日志輸出級別
*/
private static void setLogLevel(StringpackageName,StringfileName, Level level ){
try {
FileHandlerfileHandler = new FileHandler( " %h/ " + fileName + " %u.log " );
fileHandler.setFormatter( new SimpleFormatter());
ConsoleHandlerconsoleHandler = new ConsoleHandler();
consoleHandler.setLevel( level );
Logger.getLogger(packageName).addHandler(fileHandler);
Logger.getLogger(packageName).addHandler(consoleHandler);
Logger.getLogger(packageName).setLevel( level );
} catch (SecurityExceptionex){
ex.printStackTrace();
} catch (IOExceptionex){
ex.printStackTrace();
}
}
public static void main(String[]args){
// 啟用當前包的全部日志輸出
StringpackageName = " javatest " ;
setLogLevel(packageName,packageName, Level .ALL);
LoggerTesttest = new LoggerTest();
}
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
