作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/
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 執行個體。
- 下邊是使用日誌工具的一段代碼:
package javatest;
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 Logger log = Logger.getLogger(LoggerTest. class .getName());
/** Creates a new instance of LoggerTest */
public LoggerTest() {
// 使用此方法避免產生需要輸出的字串
if (log.isLoggable(Level .FINE)) {
log.log(Level .FINE, " start constructing... " );
}
}
/**
* 設定指定包的日誌輸出層級.
*
* @param packageName 指定的包
* @param fileName 指定日誌的輸出檔案
* @param level 日誌輸出層級
*/
private static void setLogLevel(String packageName, String fileName, Level level ) {
try {
FileHandler fileHandler = new FileHandler( " %h/ " + fileName + " %u.log " );
fileHandler.setFormatter( new SimpleFormatter());
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setLevel(level );
Logger.getLogger(packageName).addHandler(fileHandler);
Logger.getLogger(packageName).addHandler(consoleHandler);
Logger.getLogger(packageName).setLevel(level );
} catch (SecurityException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
// 啟用當前包的全部日誌輸出
String packageName = " javatest " ;
setLogLevel(packageName, packageName, Level .ALL);
LoggerTest test = new LoggerTest();
}
}
作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/