日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JDK日志框架之自定義日志Handler淺析

自定義日志 Handler

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、定州ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的定州網(wǎng)站制作公司

所有的 Handler 類都是繼承自 java.util.logging.Handler 抽象類,該類結(jié)構(gòu)圖 如圖  所示。

圖- Handler 類圖

由該類圖可見,Handler 抽象類提供了抽象接口:publish, flush 和 close .這些接口提供了日志輸出的基本功能。同時(shí) Handler 類保存了 Formatter,F(xiàn)ilter 和 Level 對(duì)象用來控制日志輸出。因此,編寫自定義的Handler 類需要如下步驟:

1、繼承 Handler 抽象類

2、實(shí)現(xiàn) publish,flush 和 close 方法。其中publish 方法是用于發(fā)布一條日志記錄。 flush 方法是清空內(nèi)存緩沖區(qū)。 close 方法是當(dāng)應(yīng)用程序關(guān)閉的時(shí)候,釋放該 Handler 類所申請(qǐng)的資源(如文件,socket 等)

3、設(shè)置默認(rèn)的 Formatter,F(xiàn)ilter 和 Level 對(duì)象。必要的時(shí)候,可以在類的初始化時(shí)候讀取配置文件來設(shè)置這些參數(shù)。

一個(gè)典型的自定義 Handler 類實(shí)現(xiàn)如清單 1 所示。

清單 1 自定義 Handler 類

 
 
 
 
  1. public class MyHandler extends Handler {   
  2. private bOOlean doneHeader = false;   
  3.  
  4. public MyHandler() {   
  5. setLevel(Level.INFO);   
  6. setFilter(null);   
  7. setFormatter(new SimpleFormatter());   
  8. }   
  9.  
  10. _cnnew1@Override   
  11. public void close() throws SecurityException {   
  12. if (!doneHeader) {   
  13. output(getFormatter().getHead(this));   
  14. doneHeader = true;   
  15. }   
  16. output(getFormatter().getTail(this));   
  17. flush();   
  18. }   
  19.  
  20. @Override   
  21. public void flush() {   
  22. // 清空緩沖區(qū)  
  23. }   
  24.  
  25. @Override   
  26. public void publish(LogRecord record) {   
  27. if (!isLoggable(record)) {   
  28. return;   
  29. }   
  30. String msg = getFormatter().format(record);   
  31.  
  32. try {   
  33. if (!doneHeader ) {   
  34. output(getFormatter().getHead(this));   
  35. doneHeader = true;   
  36. }   
  37. output(msg);   
  38. } catch (Exception ex) {   
  39. reportError(null, ex, ErrorManager.WRITE_FAILURE);   
  40. }   
  41. }   
  42.  
  43. private void output(String message) {   
  44. // 實(shí)現(xiàn)日志輸出  
  45. }   
  46. }  

這里 reportError 方法是將日志類中的錯(cuò)誤信息輸出到外界,這個(gè)是由 ErrorManager 類實(shí)現(xiàn)的,ErrorManager 類負(fù)責(zé)記錄日志框架中Handler 的錯(cuò)誤,一般情況下是將該錯(cuò)誤打印到控制臺(tái)中。具體的每條日志消息被JDK日志框架封裝成 LogRecord 對(duì)象,該類部分定義如 清單 2 所示。

清單 2 LogRecord 類定義

 
 
 
 
  1. public class LogRecord implements java.io.Serializable {   
  2. public String getLoggerName();   
  3. public void setLoggerName(String name);   
  4. public ResourceBundle getResourceBundle();   
  5. public void setResourceBundle(ResourceBundle bundle);   
  6. public Level getLevel();   
  7. public void setLevel(Level level);   
  8. public String getMessage();   
  9. public void setMessage(String message);   
  10. public Object[] getParameters();   
  11. public void setParameters(Object parameters[]);   
  12. public int getThreadID();   
  13. public void setThreadID(int threadID);   
  14. public long getMillis();   
  15. public void setMillis(long millis);   
  16. public Throwable getThrown();   
  17. public void setThrown(Throwable thrown);   
  18. ...   
  19. }  

由清單 2 可見,LogRecord 類包含了一個(gè)日志消息的級(jí)別、消息文本、時(shí)間、參數(shù)、線程等等所有的信息,這些都交給 Handler,F(xiàn)ormatter 和 Filter 這些對(duì)象來處理。同時(shí)該類也是可序列化的,可以序列化到網(wǎng)絡(luò)和文件中。該類還可以和一個(gè) ResourceBundle 對(duì)象綁定,實(shí)現(xiàn)消息字符串的本地化處理。

本文描述了一個(gè)典型的自定義的Handler 類的實(shí)現(xiàn)。那么現(xiàn)在你對(duì)JDK日志框架之自定義日志Handler是不是更加有感覺了呢?


新聞標(biāo)題:JDK日志框架之自定義日志Handler淺析
網(wǎng)頁(yè)URL:http://www.5511xx.com/article/djjhdes.html