標籤:
轉自:http://zochen.iteye.com/blog/616151
簡單的實現了下利用JDK中類java.util.logging.Logger來記錄日誌。主要在於仿照log4j方式用設定檔來配置日誌的輸出。網路上關於如何使用java.util.logging.Logger的文章很多,但是沒有完整的如何通過配置設定檔來達到控制日誌輸出的資料。本文的目的在於此,歡迎拍磚。
上碼。。。
1.首先封裝了個LogManager。該類的主要作用就是static塊中的代碼,意在讀取properties檔案,初始化日誌屬性。
Java代碼
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.logging.Logger;
-
- public class LogManager {
-
- // 初始化LogManager
- static {
- // 讀取設定檔 (這邊也可以使用檔案流)
- ClassLoader cl = LogManager.class.getClassLoader();
- InputStream inputStream = null;
- if (cl != null) {
- inputStream = cl.getResourceAsStream("log.properties");
- } else {
- inputStream = ClassLoader
- .getSystemResourceAsStream("log.properties");
- }
- java.util.logging.LogManager logManager = java.util.logging.LogManager
- .getLogManager();
- try {
- // 重新初始化日誌屬性並重新讀取日誌配置。
- logManager.readConfiguration(inputStream);
- } catch (SecurityException e) {
- System.err.println(e);
- } catch (IOException e) {
- System.err.println(e);
- }
- }
-
- /**
- * 擷取日誌對象
- * @param clazz
- * @return
- */
- public static Logger getLogger(Class clazz) {
- Logger logger = Logger
- .getLogger(clazz.getName());
- return logger;
- }
-
- }
2.在需要記錄日誌的地方,通過LogManager.getLogger()方法得到Logger對象,然後調用其記錄日誌的方法記錄日誌。這裡,我記錄錯誤堆棧資訊是用的 log(Level level, String msg, Throwable thrown) 。
貼出我的properties設定檔內容,其中handlers屬性一定別忘了,我就因為缺少這個屬性花費了很多時間找原因。
Java代碼
- #Level的五個等級SEVERE(最高值) 、WARNING 、INFO 、CONFIG 、FINE 、FINER 、FINEST(最低值) 。這個不同於log4j
-
- #為 Handler 指定預設的層級(預設為 Level.INFO)。
- java.util.logging.ConsoleHandler.level=INFO
- # 指定要使用的 Formatter 類的名稱(預設為 java.util.logging.SimpleFormatter)。
- java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
-
- # 為 Handler 指定預設的層級(預設為 Level.ALL)。
- java.util.logging.FileHandler.level=INFO
- # 指定要使用的 Formatter 類的名稱(預設為 java.util.logging.XMLFormatter)。
- java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
- # 指定要寫入到任意檔案的近似最大量(以位元組為單位)。如果該數為 0,則沒有限制(預設為無限制)。
- java.util.logging.FileHandler.limit=1024000
- # 指定有多少輸出檔案參與迴圈(預設為 1)。
- java.util.logging.FileHandler.count=1
- # 為產生的輸出檔案名稱指定一個模式。有關細節請參見以下內容(預設為 "%h/java%u.log")。
- java.util.logging.FileHandler.pattern=C:/SSLog%u.log
- # 指定是否應該將 FileHandler 追加到任何現有檔案上(預設為 false)。
- java.util.logging.FileHandler.append=true
-
-
-
- handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler
這樣配置後還有一個缺陷,記錄檔累積到指定的大小時,將會被重新建立,也就是之前的日誌資訊會丟失,但是不設定大小的話會導致單個檔案過大。關於這個問題還沒有花時間去細究,以下這篇博文應該能解決這一問題。
為java.util.logging自訂檔案處理器及日誌輸出格式
通設定檔的方式控制java.util.logging.Logger日誌輸出