java Logger 的使用

Logger所對應的屬性文件在安裝jdk目錄下的jre/lib/logging.properties
logging.properties文件中的
handlers= java.util.logging.ConsoleHandler  將日誌內容輸出到控制檯
handlers= java.util.logging.FileHandler     將日誌文件輸出到文件中
handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler 將日誌內容同時輸出到控制檯和文件中

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO   //日誌輸出級別

java.util.logging.FileHandler.pattern = %h/java%u.log  爲生成的輸出文件名稱指定一個模式。
模式由包括以下特殊組件的字符串組成,則運行時要替換這些組件:
  • "/" 本地路徑名分隔符
  • "%t" 系統臨時目錄
  • "%h" "user.home" 系統屬性的值
  • "%g" 區分循環日誌的生成號
  • "%u" 解決衝突的惟一號碼
  • "%%" 轉換爲單個百分數符號"%" 
如果未指定 "%g" 字段,並且文件計數大於 1,那麼生成號將被添加到所生成文件名末尾的小數點後面。

java.util.logging.FileHandler.limit = 50000   限制文件的大小,以字節爲單位
java.util.logging.FileHandler.count = 1       指定有多少輸出文件參與循環(默認爲 1)。
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter      指定要使用的 Formatter 類的名稱(默認爲 java.util.logging.XMLFormatter)。 另外一個是:java.util.logging.SimpleFormatter。XMLFormatter是以xml樣式輸出,SimpleFormatter是以普通樣式輸出。
java.util.logging.FileHandler.append 指定是否應該將 FileHandler 追加到任何現有文件上(默認爲 false)。

以下是我在類中實現日誌輸出的一個例子

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
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;

/**
 * 日誌輸出到登陸系統用戶所在的根目錄的郵政儲蓄日誌的文件夾下,
 * 並且根據系統日期命名日誌文件
 * @author wang
 *
 */
public class LoggerUtil {
   
    /** 存放的文件夾 **/
    private static String file_name = "郵政儲蓄日誌";
   
    /**
     * 得到要記錄的日誌的路徑及文件名稱
     * @return
     */
    private static String getLogName() {
        StringBuffer logPath = new StringBuffer();
        logPath.append(System.getProperty("user.home"));
        logPath.append("//"+file_name);
        File file = new File(logPath.toString());
        if (!file.exists())
            file.mkdir();
       
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        logPath.append("//"+sdf.format(new Date())+".log");
       
        return logPath.toString();
    }
   
    /**
     * 配置Logger對象輸出日誌文件路徑
     * @param logger
     * @throws SecurityException
     * @throws IOException
     */
    public static void setLogingProperties(Logger logger) throws SecurityException, IOException {
        setLogingProperties(logger,Level.ALL);
    }
   
    /**
     * 配置Logger對象輸出日誌文件路徑
     * @param logger
     * @param level 在日誌文件中輸出level級別以上的信息
     * @throws SecurityException
     * @throws IOException
     */
    public static void setLogingProperties(Logger logger,Level level) {
        FileHandler fh;
        try {
            fh = new FileHandler(getLogName(),true);
            logger.addHandler(fh);//日誌輸出文件
            //logger.setLevel(level);
            fh.setFormatter(new SimpleFormatter());//輸出格式
            //logger.addHandler(new ConsoleHandler());//輸出到控制檯
        } catch (SecurityException e) {
            logger.log(Level.SEVERE, "安全性錯誤", e);
        } catch (IOException e) {
            logger.log(Level.SEVERE,"讀取文件日誌錯誤", e);
        }
    }
   
    public static void main(String [] args) {
        Logger logger = Logger.getLogger("sgg");
        try {
            LoggerUtil.setLogingProperties(logger);
            logger.log(Level.INFO, "ddddd");
            logger.log(Level.INFO, "eeeeee");
            logger.log(Level.INFO, "ffffff");
            logger.log(Level.INFO, "gggggg");
            logger.log(Level.INFO, "hhhhhh");
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
    }
}


注意:Logger logger = Logger.getLogger("sgg");  sgg只能出現一次,否則回重複輸出值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章