package com.zhou.util;
import lombok.extern.slf4j.Slf4j;
/**
* 过程计时器
* @author lang.zhou
* @since 2022/10/25 10:34
*/
@Slf4j
public class TimeCounter {
private String name = "";
/**
* 开始执行时间
*/
private final boolean debug ;
/**
* 开始执行时间
*/
private final Long t0 ;
/**
* 上一次打印时间
*/
private Long lastT ;
public TimeCounter() {
this("");
}
public TimeCounter(String name) {
this(name,false);
}
public TimeCounter(String name, boolean debug) {
this.name = name;
this.debug = debug;
this.lastT = t0 = System.currentTimeMillis();
}
/**
* 打印距离上个时间的耗时
*/
public long print(String msg, Object... args){
Long t = System.currentTimeMillis();
long dt = t - lastT;
String info = String.format(msg,args);
if(debug){
log.debug("{}[{}]耗时{}",getNameStr(),info, dt);
}else{
log.info("{}[{}]耗时{}",getNameStr(),info, dt);
}
lastT = t;
return dt;
}
private String getNameStr(){
return StringTool.isBlank(name) ? "" : "【" + name + "】";
}
/**
* 重置上个时间
*/
public void reset(){
lastT = System.currentTimeMillis();
}
/**
* 总耗时
*/
public long total(String msg, Object... args){
String info = String.format(msg,args);
long total = System.currentTimeMillis() - t0;
if(debug){
log.debug("{}[{}]{}",getNameStr(),info,total);
}else{
log.info("{}[{}]{}",getNameStr(),info,total);
}
return total;
}
}
TimeCounter c = new TimeCounter();
//do something
c.print("操作1");
//do something
c.print("操作2");
//do something
c.reset();
//do something
c.print("操作3");
c.total("总耗时");