code: public static void logThreadInfo(Log log,
                                     String title,
                                     long minInterval) {
      boolean dumpStack = false;
      if (log.isInfoEnabled()) {
        synchronized (ReflectionUtils.class) {
          long now = System.currentTimeMillis();
          if (now - previousLogTime >= minInterval * 1000) {
            previousLogTime = now;
            dumpStack = true;
          }
        }
        if (dumpStack) {
          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
          printThreadInfo(new PrintWriter(buffer), title);
          log.info(buffer.toString());
        }
      }
    }
docs: Log the current thread stacks at INFO level.
  @param log the logger that logs the stack trace
  @param title a descriptive title for the call stacks
  @param minInterval the minimum time from the last