告別System.out.print()—J2SDK1.4新增Java日誌框架(二) (轉)
Handler在建立時使用LogManager物件的相關屬性的預設值(如Handler的Filter、Formatter、Level等物件屬性)進行初始化。
Handler物件可透過setLevel(Level.OFF)暫停工作;透過呼叫setLevel設定適當的記錄日誌訊息級別恢復工作。
Handler是一個抽象類。在J2SDK1.4中,其子類及它們之間的關係見圖一。
1、 MemoryHandler Handler的子類,在中的一個迴圈緩衝區用於快取日誌記錄請求。通常MemoryHandler只簡單的把傳入的LogRecords到它的記憶體中。這種快取的開銷非常低廉,它去掉了格式化所產生的消耗。當某個觸發條件滿足時,MemoryHandler將其緩衝的資料push(釋出)到目標Handler,由後者實際的輸出。有三種觸發MemoryHandler進行push操作:a、傳入的LogRecords的級別高於MemoryHandler預先定義的push級別;b、有其他物件顯式的呼叫其push方法;c、其子類過載了log方法,逐一檢索每個傳入的LogRecords,若符合特定的標準則進行push操作。
例項:假設我們需要跟蹤一個生產環境中的一個很少出現的。在大多數場合,系統化產生大量的日誌記錄,而我們僅只關心記錄中最近的幾條,那麼我們只需要使用MemoryHandler對日誌記錄進行快取,當且僅當某個事件發生時將最近的幾條記錄從記憶體中 dump到制定的中。
//MemoryHandlerTest.
import java.util.logging.*;
import java.io.*;
public class MemoryHandlerTest {
FileHandler fhandler;
Logger logger;
MemoryHandler mhandler;
MemoryHandlerTest() {
try {
//構造名為my.log的日誌記錄檔案
fhandler = new FileHandler("my.log");
int numRec = 5;
//構造一個5個日誌記錄的MemoryHandler,
//其目標Handler為一個FileHandler
mhandler = new MemoryHandler (fhandler, numRec, Level.OFF) ;
//構造一個記錄器
logger = Logger.getLogger("com.mycompany");
//為記錄器新增一個MemoryHandler
logger.addHandler(mhandler);
:namespace prefix = o ns = "urn:schemas--com::office" />
} catch (IOException e) {
}
}
public static void main(String args[]) {
MemoryHandlerTest mt = new MemoryHandlerTest();
int trigger = (int)(Math.ran()*100);
for (int i=1;i<100;i++) {
//在MemoryHandler中快取日誌記錄
mt.logger.log(Level.INFO,"日誌記錄"+i);
if (i==trigger) {
//觸發事件成立,顯式呼叫MemoryHandler的
//push方法觸發目標Handler輸出日誌記錄到
//my.log檔案中
mt.mhandler.push();
break;
}
}
}
}
例項2
2、 FileHandler 檔案。
StreamHandler流處理器將日誌記錄以流的形式輸出。FileHandler、ConsoleHandler、SocketHandler為StreamHandler的子類。 ConsoleHandler將日誌記錄輸出到控制終端。前面的例項(例項2除外)都將日記記錄資料輸出到控制檯。
FileHandler將日誌記錄輸出到特定的檔案,或迴圈的幾個日誌檔案中。日誌檔案可以設定容量大小。當日志檔案達到限定的容量時將被自動清空,重頭開始寫入新的日誌記錄資料。
例:建立一個容量為1Mb的器
int limit = 1000000; // 1 Mb
FileHandler fh = new FileHandler("my.log", limit, 1);
對於迴圈的日誌檔案,每個檔案將被指定容量限制。噹噹前的日誌檔案的長度達到制定值後該檔案被關閉,新的日誌檔案被建立,舊的檔案將在檔名模板後追加序號。如此產生多個順序編號的日誌記錄檔案。
例:
try {
// 建立一個擁有3個日誌檔案,每個容量為1Mb的檔案處理器
String pattern = "my%g.log";
int limit = 1000000; // 1 Mb
int numLogFiles = 3;
FileHandler fh = new FileHandler(pattern, limit, numLogFiles);
…
} catch (IOException e) {
}
(四)、Level
Level物件定義了一組日誌訊息的級別,用於控制日誌訊息的輸出。一個級別對應一個整型值。日誌訊息級別按照其整數值的大小排定優先順序。在Logger物件中設定一個級別,則大於等於該級別的日誌訊息將會被傳遞到某個Handler物件進行輸出處理。
J2SDK1.4的Java Logging中定義了以下訊息級別:
級別名稱
int值( 2000環境)
OFF
2147483647
SEVERE
1000
WARNING
900
INFO
800
CONFIG
700
FINE
500
FINER
400
FINEST
300
ALL
-2147483648
表一
Level.OFF具有最高的級別。將Logger的Level級別設定成Level.OFF
讓我們看看訊息級別是怎樣工作的:LoggingLevelTest.java
import java.util.logging.*;
public class LoggingLevelTest {
public static void main(String args[]) {
//使用Logger的靜態方法獲得一個匿名Logger
Logger logger1 = Logger.getAnonymousLogger();
//設定Logger物件記錄的最低日誌訊息級別
logger1.setLevel(Level.FINER);
//記錄訊息
logger1.severe("SEVERE級訊息");
logger1.warning("WARNING級訊息");
logger1.config("CONFIG級訊息");
logger1.info("INFO級訊息");
logger1.fine("FINE級訊息");
logger1.finer("FINER級訊息");
logger1.finest("FINEST級訊息");
}
}
例項3
執行結果:
-1-15 7:02:03 LoggingLevelTest main
: SEVERE級訊息
2003-1-15 7:02:04 LoggingLevelTest main
警告: WARNING級訊息
2003-1-15 7:02:04 LoggingLevelTest main
: CONFIG級訊息來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 告別System.out.print()—J2SDK1.4新增Java日誌框架(三) (轉)Java框架
- 萬字長文帶你瞭解Java日誌框架使用Java日誌框架Java框架
- Java日誌框架演化歷史Java框架
- 掌握Java各種日誌框架Java框架
- Java 日誌框架 LogbackJava框架
- Java日誌框架那些事兒Java框架
- [Java/日誌] 日誌框架列印應用程式日誌程式碼的執行情況Java框架
- java 日誌脫敏框架 sensitive,優雅的列印脫敏日誌Java框架
- 帶你掌握Java各種日誌框架Java框架
- Java日誌框架:logback詳解Java框架
- Java日誌:您需要了解的4種日誌型別Java型別
- 新增webservice呼叫日誌Web
- flask 框架日誌Flask框架
- Java日誌框架:SLF4J詳解Java框架
- Java常用的日誌框架對比和分析Java框架
- 日誌框架學習框架
- 5款Java開源日誌框架大比拼Java框架
- java ssm框架入門(二)新增語言濾器JavaSSM框架
- mysql 日誌之二進位制日誌MySql
- Oracle日誌組新增冗餘檔案和日誌組Oracle
- 新增、刪除日誌檔案
- SpringBoot 日誌框架Spring Boot框架
- 日誌採集框架Flume框架
- Apche日誌系列(4):日誌分析(轉)
- mysql之 日誌體系(錯誤日誌、查詢日誌、二進位制日誌、事務日誌、中繼日誌)MySql中繼
- 為oracle新增重做日誌組及重做日誌成員Oracle
- Redis日誌級別Redis
- log4j日誌輸出級別(轉)
- 日誌秘密Windows登入型別知多少(轉)Windows型別
- Java日誌框架:slf4j作用及其實現原理Java框架
- Apche日誌系列(1):訪問日誌(轉)
- Apche日誌系列(2):錯誤日誌(轉)
- Apche日誌系列(3):定製日誌(轉)
- 玄機-第二章日誌分析-apache日誌分析Apache
- 日誌框架SLF4J框架
- jdon框架日誌資訊錯誤框架
- delphi xe 好用的日誌框架框架
- FLOWERS開發日誌(二)