@Override
  public void summarize(StopWatch stopWatch, Logger logger) {
    if (logger.isTraceEnabled()) {
      logger.trace(
          "StopWatch '{}': start timestamp(ns): {}, stop timestamp(ns): {}, running time = {} ({} ns) ({} us) ({} ms), task count: {}",
          new Object[] {
            stopWatch.getId(),
            stopWatch.getStartTime(),
            stopWatch.getStopTime(),
            DurationFormatUtils.formatDuration(
                stopWatch.getTotalTime() / DateUtils.NANOS_PER_MILLIS,
                StopWatchSummary.DATE_FORMAT),
            stopWatch.getTotalTime(),
            stopWatch.getTotalTime() / DateUtils.NANOS_PER_MICROS,
            stopWatch.getTotalTime() / DateUtils.NANOS_PER_MILLIS,
            stopWatch.getTaskCount()
          });
      if (stopWatch.getTaskCount() == 0) {
        logger.trace("No task info kept");
      } else {

        TaskInfo[] taskInfos = stopWatch.getTaskInfo();
        if (sort) {
          Arrays.sort(
              taskInfos,
              new Comparator<TaskInfo>() {

                @Override
                public int compare(TaskInfo o1, TaskInfo o2) {
                  return new ComparableComparator().compare(o2.getTotalTime(), o1.getTotalTime());
                }
              });
        }
        for (TaskInfo task : taskInfos) {
          logger.trace(
              "\tTask Name '{}': start timestamp(ns): {}, stop timestamp(ns): {}, running time: {} ({} ns) ({} us) ({} ms) ({})",
              new Object[] {
                task.getTaskName(),
                task.getStartTime(),
                task.getStopTime(),
                DurationFormatUtils.formatDuration(
                    task.getTotalTime() / DateUtils.NANOS_PER_MILLIS, StopWatchSummary.DATE_FORMAT),
                task.getTotalTime(),
                task.getTotalTime() / DateUtils.NANOS_PER_MICROS,
                task.getTotalTime() / DateUtils.NANOS_PER_MILLIS,
                pf.format(task.getTotalTime() / (double) stopWatch.getTotalTime())
              });
        }
      }
    }
  }