| #1 得分:0 回复于: 2004-06-22 17:24:13 使用一个单独的类封装日志记录,在该类中记录当前使用的文件名,每次记日志时获取一下系统时间,与文件名匹配一下,发现日期不同则新开文件。 下面是我利用jdk1.4附带的logging包写的日志记录类: package olcom.mp.opermanage.lom.term; import java.util.logging.*; import olcom.mp.opermanage.util.DateFormator; import java.io.*; import java.util.Date; /** * 记日志 * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author not attributable * @version 1.0 */ public class TermLogging { //logger private Logger logger; //输出处理 private FileHandler currentHandler; //使用的日期 private String strCurrDate; //输出级别 private Level level; //日志路径 private String logPath = "term_log"; /** * 构造函数 */ public TermLogging(){ logger = Logger.getLogger("Term"); logger.setUseParentHandlers(false); strCurrDate = DateFormator.parseLongToStr(System.currentTimeMillis(),"yyyyMMdd"); try { createDir(); currentHandler = new FileHandler( getFileName(),true ); logger.addHandler(currentHandler); currentHandler.setFormatter(new TermFormatter()); } catch (IOException e) { System.out.println("[OperManage]Log exception:" + e.getMessage() ); } } /** * 获取日志文件名 * @return */ private String getFileName(){ return logPath + "/term" + strCurrDate + ".log"; } /** * 创建日志目录 */ private void createDir() { File fdir = new File(logPath); if (!fdir.exists()) { System.out.println("[OperManage]Create Term log dir"); if (fdir.mkdir() == false) { System.out.println("[OperManage]Log dir create fail"); } } } /** * 记日志 * @param info */ public void log(String info) { //获取记日志时的日期 String strLogDate = DateFormator.parseLongToStr(System.currentTimeMillis(),"yyyyMMdd"); //如果日期和当前用的不一致,生成新的文件 if ( !strLogDate.equals(strCurrDate) ) { strCurrDate = strLogDate; logger.removeHandler(currentHandler); try { currentHandler = new FileHandler( getFileName(),true ); logger.addHandler(currentHandler); currentHandler.setFormatter(new TermFormatter()); } catch (IOException e) { System.out.println("[OperManage]Log exception:" + e.getMessage() ); } } //记录 logger.log(OpLevel.TERM,info); } } /** * 自定义消息级别 * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author not attributable * @version 1.0 */ class OpLevel extends Level { //定义自己的消息级别TERM public static final Level TERM = new OpLevel("TERM", Level.INFO.intValue() + 50); public OpLevel(String ln, int v) { super(ln, v); } } /** * 格式化日志记录 * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author not attributable * @version 1.0 */ class TermFormatter extends Formatter { public String format(LogRecord rec) { String dem = "\t"; StringBuffer buf = new StringBuffer(1000); //作为消息ID buf.append(rec.getMillis()); buf.append(dem); //时间 String time = DateFormator.parseLongToStr(System.currentTimeMillis(),"yyyyMMddHHmmss"); buf.append(time); buf.append(dem); //消息级别 buf.append(rec.getLevel()); buf.append(dem); //格式化日志记录数据 buf.append(formatMessage(rec)); //换行 buf.append('\n'); return buf.toString(); } } |