用spring StopWatch计时

很多框架提供计时类 spring也不例外

记录下使用StopWatch的类

package cn.ceopen.zweb.common;

import java.io.IOException;
import java.text.NumberFormat;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.restlet.data.Request;
import org.springframework.util.StopWatch;
import org.springframework.util.StopWatch.TaskInfo;

/**
* 把方法执行时间写日志文件
*
* 用法:
* MethodTimeLogger first = new MethodTimeLogger("任务名称");
first.start("A");
Thread.sleep(200);
first.stop();
first.start("B");
Thread.sleep(200);
first.stop();
first.start("C");
Thread.sleep(120);
first.stop();
first.writeLog();
*
* @author 徐良永
* @created 2014年1月13日 上午10:52:25
*/
public class StopWatchLogger {
private static final Log log = LogFactory.getLog(StopWatchLogger.class);

private StopWatch clock;

/**
* 任务名称
*/
private String taskName;


/**
* 创建一个即时任务
*/
public StopWatchLogger(String taskName) {
if(StringUtils.isBlank(taskName)){
throw new NullPointerException();
}
this.taskName = taskName;
clock = new StopWatch();
}

/**
* 开始计时
*/
public void start(Request request){
StringBuilder sb = new StringBuilder();
//输出请求数据
sb.append(request.getResourceRef().getTargetRef().toString());
sb.append(" " + request.getMethod().getName());
sb.append(" ");

if(request.getEntity() != null && !request.getEntity().isTransient()){ //isTransient 表示可重复读取
try {
sb.append(request.getEntity().getText());
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}

clock.start(sb.toString());
}

/**
* 开始一个子任务计时
* @param taskName: 任务名
*/
public void start(String subTaskName){
clock.start(subTaskName);
}

/**
* 停止计时
*/
public void stop(){
clock.stop();
}

/**
* 输出执行时间
*/
public void writeLog(){
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMinimumIntegerDigits(5);
nf.setGroupingUsed(false);

log.info(">>>> " + nf.format(clock.getTotalTimeMillis()) + " " + taskName);

for (TaskInfo task : clock.getTaskInfo()) {
StringBuilder sb = new StringBuilder();
sb.append(nf.format(task.getTimeMillis())).append(" ");
sb.append(task.getTaskName());
log.info(sb);
}
}


public static void main(String[] args) throws InterruptedException{
StopWatchLogger first = new StopWatchLogger("test");
first.start("A");
Thread.sleep(200);
first.stop();
first.start("B");
Thread.sleep(200);
first.stop();
first.start("C");
Thread.sleep(120);
first.stop();
first.writeLog();

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值