📄 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 + -