使用一个单独的类封装日志记录,在该类中记录当前使用的文件名,每次记日志时获取一下系统时间,与文件名匹配一下,发现日期不同则新开文件。
下面是我利用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();
    }
}