您的位置:首页 > 其它

请问:如何实现文件日志功能?要求每天换一个文件。文件名以日期区分

2013-01-28 15:02 751 查看
结帖率:100%
#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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐