?? jzjlogger.java
字號:
package org.jr.jzj;
/**
* <p>Copyright: Copyright (c) 2002-2003</p>
* <p>Company: JavaResearch(http://www.javaresearch.org)</p>
* <p>最后更新日期:2003年1月9日
* @author Cherami,Barney,Brain
* @version 0.8
*/
import java.io.*;
import java.util.*;
import java.util.logging.*;
import java.util.prefs.*;
/**
* 系統的日志管理器,負責整個系統的日志的控制和維護。
* <p><b>由于將管理器和類實例放在了同一個類來表達,因此不是很合適,以后會進行重構和分離。</b>
* <p>由于有很多的日志工具,因此使用這個類進行封裝方便以后更改底層的實現方式。
* <p>目前使用的是JDK1.4的java.util.logging.Logger類。
*/
public class JZJLogger {
private static FileHandler logFileHandler; //日志文件處理器
private static Level level; //日志記錄級別
private static ArrayList loggers = new ArrayList(); //管理器管理的所有日志類實例列表
private static boolean inited = false; //日志管理器是否完成初始化標志
private Logger logger; //實際的日志類實例
private static JZJLogger globalLogger; //全局日志類實例,完成系統信息的記錄
private static String logFileName = "JZJlogs.log"; //日志文件的文件名
private String name; //日志類的類名
private static boolean isDebugable = true; //是否輸出調試信息
Preferences preference = JZipJar.preference;
public static final int OFF = 0;
public static final int ALL = 1;
public static final int WARNING = 4;
public static final int ERROR = 8;
/**
* 構造方法,在管理器沒有初始化時應該進行缺省初始化。
* @param c 日志實例的類名
*/
public JZJLogger(Class c) {
//日志管理器在沒有初始化時進行缺省初始化
if (!inited) {
init(null, ALL, true);
}
name = c.getName();
logger = Logger.getLogger(name);
logger.addHandler(logFileHandler);
loggers.add(logger);
logger.setLevel(level);
if (globalLogger != null) {
globalLogger.info("new JZJLogger:" + name);
}
}
/**
* 得到日志實例的名稱(類名)。
* @return 日志實例的名稱
*/
public String getName() {
return name;
}
/**
* 日志管理器的初始化方法。
* @param fileName 日志文件的文件名
* @param level 日志記錄的級別
* @throws IOException 在日志文件生成出錯的情況下拋出異常
*/
public static void init(String fileName, int level) {
init(fileName, level, true);
}
/**
* 日志管理器的初始化方法。
* @param fileName 日志文件的文件名
* @param level 日志記錄的級別
* @param isDebugable 是否輸出調試信息
* @throws IOException 在日志文件生成出錯的情況下拋出異常
*/
public static void init(String fileName, int level, boolean isDebugable) {
if (!inited) {
try {
setFileHandler(fileName);
}
catch (IOException e) {
}
setLevel(getLevel(level));
JZJLogger.isDebugable = isDebugable;
inited = true;
globalLogger = new JZJLogger(JZJLogger.class);
globalLogger.info("JZJLogger initialize." + "\tlog file:" + fileName +
".\tlevel:" + level);
}
}
private static Level getLevel(int level) {
switch (level) {
case OFF:
return Level.OFF;
case ALL:
return Level.ALL;
case WARNING:
return Level.WARNING;
case ERROR:
return Level.SEVERE;
default:
return Level.OFF;
}
}
/**
* 得到日志實例的實際的底層的日志類實例。
* @return 實際的底層的日志類實例
*/
protected Logger getLogger() {
return logger;
}
/**
* 設置日志信息的格式。
* @param formatter 格式實例
*/
public static void setFormatter(Formatter formatter) {
logFileHandler.setFormatter(formatter);
}
/**
* 設置系統的日志文件處理器。
* @param fileName 日志文件的文件名
* @throws IOException 創建日志文件出錯時拋出此異常
*/
private static void setFileHandler(String fileName) throws IOException {
setFileHandler(fileName, new SimpleFormatter());
}
/**
* 設置系統的日志文件處理器。
* @param fileName 日志文件的文件名
* @param formatter 格式實例
* @throws IOException 創建日志文件出錯時拋出此異常
*/
private static void setFileHandler(String fileName, Formatter formatter) throws
IOException {
if (fileName != null) {
logFileName = fileName;
}
logFileHandler = new FileHandler(logFileName);
setFormatter(formatter);
}
/**
* 設置日志記錄的級別。
* @param level 日志記錄的級別
*/
public static void setLevel(Level level) {
JZJLogger.level = level;
Iterator iterator = loggers.iterator();
while (iterator.hasNext()) {
JZJLogger log = (JZJLogger) iterator.next();
log.logger.setLevel(level);
}
}
/**
* 將信息作為錯誤寫入日志。
* @param message 錯誤信息
*/
public void error(String message) {
logger.severe(message);
}
/**
* 將信息作為警告寫入日志。
* @param message 警告信息
*/
public void warning(String message) {
logger.warning(message);
}
/**
* 將信息寫入日志。
* @param message 信息
*/
public void info(String message) {
logger.info(message);
}
/**
* 是否輸出調試信息并寫入日志。
* @return 輸出時返回true,否則返回false
*/
public static boolean isDebugable() {
return isDebugable;
}
/**
* 設置是否輸出調試信息并寫入日志。
* @param isDebugable 是否輸出調試信息并寫入日志
*/
public static void setDebugable(boolean isDebugable) {
JZJLogger.isDebugable = isDebugable;
}
/**
* 將調試信息輸出并寫到日志,但是如果管理器不運行輸出調試信息的情況下此方法沒有任何作用。
* @param message 調試信息
*/
public void debug(String message) {
if (isDebugable) {
logger.info(message);
}
}
/**
* 將調試信息輸出并寫到日志,但是如果管理器不運行輸出調試信息的情況下此方法沒有任何作用。
* @param message 整型的調試信息
*/
public void debug(int message) {
if (isDebugable) {
logger.info(String.valueOf(message));
}
}
/**
* 將調試信息輸出并寫到日志,但是如果管理器不運行輸出調試信息的情況下此方法沒有任何作用。
* @param message 調試信息,實際寫入的是對象的toString方法得到的字符串
*/
public void debug(Object message) {
if (isDebugable) {
if (message != null) {
logger.info(message.toString());
}
else {
logger.info("null");
}
}
}
//TODO 其他的debug方法,需要一整套,目前只使用到以上幾個
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -