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" 解決衝突的惟一號碼
- "%%" 轉換爲單個百分數符號"%"
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只能出現一次,否則回重複輸出值