打印时间工具类

 自己写的工具类,方便调试方法运行时间,代码如下:

package com.example.demo.log;

import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

/**
 * User: yang.jiqun
 * Date: 2019/3/28
 * Desc:
 */
public class TimeUtils {

    private static Map<String, Long> timeMap = Maps.newConcurrentMap();
    private static Logger logger = Logger.getLogger(TimeUtils.class);

    /**
     * 开始记录
     * @param logName
     */
    public static void startLog(String logName) {
        long startTime = System.currentTimeMillis();
        timeMap.put(startTimeKey(logName), startTime);
        logger.debug(String.format("[%s] START TIME=>[%s],currentTimeMillis=>%d"
                ,logName
                ,new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(startTime))
                ,startTime));
    }

    /**
     * 开始记录
     */
    public static void startLog() {
        String logName = generatorLogName();
        startLog(logName);
    }

    /**
     * startTimeKey
     * @param logName
     * @return
     */
    private static String startTimeKey(String logName) {
        return Thread.currentThread().getName() + "-" + StringUtils.stripToEmpty(logName);
    }

    /**
     * 开始记录
     */
    public static long endLog() {
        String logName = generatorLogName();
        return endLog(logName);
    }

    /**
     * 结束日志
     * @param logName
     * @return 时间戳
     */
    public static long endLog(String logName) {
        long endTime = System.currentTimeMillis();
        if (!timeMap.containsKey(startTimeKey(logName))) {
            return 0;
        }
        long startTime = timeMap.remove(startTimeKey(logName));
        logger.debug(String.format("[%s] END TIME=>[%s],currentTimeMillis=>%d"
                ,logName
                ,new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(endTime))
                ,endTime));
        logger.info(String.format("[%s] 耗时=>%d ms",startTimeKey(logName),endTime - startTime));
        return endTime - startTime;
    }

    private static String generatorLogName() {
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        StackTraceElement log = stackTrace[1];
        String tag = null;
        //如果class名称不为自己,则为调用该方法的className.methodName
        for (int i = 1; i < stackTrace.length; i++) {
            StackTraceElement e = stackTrace[i];
            if (!e.getClassName().equals(log.getClassName())) {
                tag = e.getClassName() + "." + e.getMethodName();
                break;
            }
        }
        if (tag == null) {
            tag = log.getClassName() + "." + log.getMethodName();
        }
        return tag;
    }

    public static void main(String args[]){

        logger.setLevel(Level.INFO);
        for(int i = 1;i <= 5;i++){
            new Thread(new Runnable(){
                @Override
                public void run() {
                    for(int i = 1;i <= 5;i++){
                        TimeUtils.startLog("logName" + i);
                        try {
                            Thread.sleep(1000);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        TimeUtils.endLog("logName" + i);
                    }
                }
            }).start();

        }
    }
}

依赖 commons-loggiing,apache-log4j,commons-lang3,joda-time,guava,不想依赖可以自己改造。

打印结果:

2020-04-08 09:18:11,759 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-3-logName1] 耗时=>1014 ms
2020-04-08 09:18:11,761 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-1-logName1] 耗时=>1007 ms
2020-04-08 09:18:11,760 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-4-logName1] 耗时=>1012 ms
2020-04-08 09:18:11,760 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-0-logName1] 耗时=>1011 ms
2020-04-08 09:18:11,759 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-2-logName1] 耗时=>1014 ms
2020-04-08 09:18:12,765 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-1-logName2] 耗时=>1000 ms
2020-04-08 09:18:12,768 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-4-logName2] 耗时=>1000 ms
2020-04-08 09:18:12,770 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-2-logName2] 耗时=>1003 ms
2020-04-08 09:18:12,773 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-0-logName2] 耗时=>1006 ms
2020-04-08 09:18:12,774 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-3-logName2] 耗时=>1001 ms
2020-04-08 09:18:13,771 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-2-logName3] 耗时=>1001 ms
2020-04-08 09:18:13,772 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-1-logName3] 耗时=>1006 ms
2020-04-08 09:18:13,772 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-4-logName3] 耗时=>1004 ms
2020-04-08 09:18:13,774 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-0-logName3] 耗时=>1000 ms
2020-04-08 09:18:13,776 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-3-logName3] 耗时=>1001 ms
2020-04-08 09:18:14,771 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-2-logName4] 耗时=>1000 ms
2020-04-08 09:18:14,773 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-1-logName4] 耗时=>1000 ms
2020-04-08 09:18:14,774 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-4-logName4] 耗时=>1001 ms
2020-04-08 09:18:14,776 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-0-logName4] 耗时=>1001 ms
2020-04-08 09:18:14,778 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-3-logName4] 耗时=>1002 ms
2020-04-08 09:18:15,772 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-2-logName5] 耗时=>1001 ms
2020-04-08 09:18:15,775 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-1-logName5] 耗时=>1002 ms
2020-04-08 09:18:15,776 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-4-logName5] 耗时=>1001 ms
2020-04-08 09:18:15,778 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-0-logName5] 耗时=>1001 ms
2020-04-08 09:18:15,781 [INFO] com.example.demo.log.TimeUtils.endLog(TimeUtils.java:75) [Thread-3-logName5] 耗时=>1001 ms

一年又过去了,时间真的很快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值