package zielu.gittoolbox.util; import com.google.common.base.Stopwatch; import com.intellij.openapi.diagnostic.Logger; import java.util.Arrays; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; public class LogWatch { private final Logger myLog; private final String myMessage; private final boolean myEnabled; private final Stopwatch myWatch; private LogWatch(Logger log, String message) { myLog = log; myEnabled = myLog.isDebugEnabled(); if (myEnabled) { myMessage = message; myWatch = Stopwatch.createUnstarted(); } else { myMessage = ""; myWatch = null; } } public static LogWatch create(Logger log, String message) { return new LogWatch(log, message); } public static LogWatch createStarted(Logger log, String message) { return create(log, message).start(); } public LogWatch start() { if (myEnabled && !myWatch.isRunning()) { myWatch.start(); } return this; } public LogWatch elapsed(String message, Object... rest) { if (myEnabled) { String other = Arrays.stream(rest).map(String::valueOf).collect(Collectors.joining("")); myLog.debug(myMessage + "/" + message + other + " [ms]: ", myWatch.elapsed(TimeUnit.MILLISECONDS)); } return this; } public LogWatch finish() { if (myEnabled && myWatch.isRunning()) { myLog.debug(myMessage + " [ms]: ", myWatch.stop().elapsed(TimeUnit.MILLISECONDS)); } return this; } }