通設定檔的方式控制java.util.logging.Logger日誌輸出

來源:互聯網
上載者:User

標籤:

轉自:http://zochen.iteye.com/blog/616151

 

簡單的實現了下利用JDK中類java.util.logging.Logger來記錄日誌。主要在於仿照log4j方式用設定檔來配置日誌的輸出。網路上關於如何使用java.util.logging.Logger的文章很多,但是沒有完整的如何通過配置設定檔來達到控制日誌輸出的資料。本文的目的在於此,歡迎拍磚。 
  上碼。。。 

  1.首先封裝了個LogManager。該類的主要作用就是static塊中的代碼,意在讀取properties檔案,初始化日誌屬性。 

Java代碼  
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.util.logging.Logger;  
  4.   
  5. public class LogManager {  
  6.   
  7.     // 初始化LogManager  
  8.     static {  
  9.         // 讀取設定檔  (這邊也可以使用檔案流)
  10.         ClassLoader cl = LogManager.class.getClassLoader();  
  11.         InputStream inputStream = null;  
  12.         if (cl != null) {  
  13.             inputStream = cl.getResourceAsStream("log.properties");  
  14.         } else {  
  15.             inputStream = ClassLoader  
  16.                     .getSystemResourceAsStream("log.properties");  
  17.         }  
  18.         java.util.logging.LogManager logManager = java.util.logging.LogManager  
  19.                 .getLogManager();  
  20.         try {  
  21.             // 重新初始化日誌屬性並重新讀取日誌配置。  
  22.             logManager.readConfiguration(inputStream);  
  23.         } catch (SecurityException e) {  
  24.             System.err.println(e);  
  25.         } catch (IOException e) {  
  26.             System.err.println(e);  
  27.         }  
  28.     }  
  29.   
  30.     /** 
  31.      * 擷取日誌對象 
  32.      * @param clazz 
  33.      * @return 
  34.      */  
  35.     public static Logger getLogger(Class clazz) {  
  36.         Logger logger = Logger  
  37.                 .getLogger(clazz.getName());  
  38.         return logger;  
  39.     }  
  40.   
  41. }  

  

  2.在需要記錄日誌的地方,通過LogManager.getLogger()方法得到Logger對象,然後調用其記錄日誌的方法記錄日誌。這裡,我記錄錯誤堆棧資訊是用的 log(Level level, String msg, Throwable thrown) 。 


貼出我的properties設定檔內容,其中handlers屬性一定別忘了,我就因為缺少這個屬性花費了很多時間找原因。 

Java代碼  
  1. #Level的五個等級SEVERE(最高值) 、WARNING 、INFO 、CONFIG 、FINE 、FINER 、FINEST(最低值)  。這個不同於log4j  
  2.   
  3. #為 Handler 指定預設的層級(預設為 Level.INFO)。   
  4. java.util.logging.ConsoleHandler.level=INFO  
  5. # 指定要使用的 Formatter 類的名稱(預設為 java.util.logging.SimpleFormatter)。   
  6. java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter  
  7.   
  8. # 為 Handler 指定預設的層級(預設為 Level.ALL)。   
  9. java.util.logging.FileHandler.level=INFO  
  10. # 指定要使用的 Formatter 類的名稱(預設為 java.util.logging.XMLFormatter)。   
  11. java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter  
  12. # 指定要寫入到任意檔案的近似最大量(以位元組為單位)。如果該數為 0,則沒有限制(預設為無限制)。   
  13. java.util.logging.FileHandler.limit=1024000  
  14. # 指定有多少輸出檔案參與迴圈(預設為 1)。   
  15. java.util.logging.FileHandler.count=1  
  16. # 為產生的輸出檔案名稱指定一個模式。有關細節請參見以下內容(預設為 "%h/java%u.log")。   
  17. java.util.logging.FileHandler.pattern=C:/SSLog%u.log  
  18. # 指定是否應該將 FileHandler 追加到任何現有檔案上(預設為 false)。   
  19. java.util.logging.FileHandler.append=true  
  20.   
  21.   
  22.   
  23. handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler  




這樣配置後還有一個缺陷,記錄檔累積到指定的大小時,將會被重新建立,也就是之前的日誌資訊會丟失,但是不設定大小的話會導致單個檔案過大。關於這個問題還沒有花時間去細究,以下這篇博文應該能解決這一問題。 
為java.util.logging自訂檔案處理器及日誌輸出格式 

通設定檔的方式控制java.util.logging.Logger日誌輸出

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.