diff --git a/Creek.HelpfulExtensions/Creek.HelpfulExtensions.csproj b/Creek.HelpfulExtensions/Creek.HelpfulExtensions.csproj index 51bdcc6..27738a1 100644 --- a/Creek.HelpfulExtensions/Creek.HelpfulExtensions.csproj +++ b/Creek.HelpfulExtensions/Creek.HelpfulExtensions.csproj @@ -19,11 +19,12 @@ LICENSE git creek - 1.3.0 - 1.3.0.0 + 1.4.0 + 1.4.0.0 + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Creek.HelpfulExtensions/DisposableStopWatchExtension.cs b/Creek.HelpfulExtensions/DisposableStopWatchExtension.cs new file mode 100644 index 0000000..242af01 --- /dev/null +++ b/Creek.HelpfulExtensions/DisposableStopWatchExtension.cs @@ -0,0 +1,58 @@ +using System; +using System.Diagnostics; +using Microsoft.Extensions.Logging; + +namespace Creek.HelpfulExtensions +{ + public class DisposableStopWatch : IDisposable + { + private ILogger _logger; + private Stopwatch _stopWatch; + private string _message; + private bool _useConsole; + + public DisposableStopWatch(ILogger logger, string message = null, bool useConsole = false) + { + _logger = logger; + _stopWatch = new Stopwatch(); + _message = message ?? string.Empty; + _useConsole = useConsole; + + string startMessage = $"Start: {message}"; + + if (_useConsole) + { + _logger.LogInformation(startMessage); + Console.WriteLine(startMessage); + } + else + { + _logger.LogInformation(startMessage); + } + + _stopWatch.Start(); + } + + public void Dispose() + { + _stopWatch.Stop(); + + string endMessage = $"Complete:{_message}: Elapsed: {_stopWatch.Elapsed}"; + + if (_useConsole) + { + _logger.LogInformation(endMessage); + Console.WriteLine(endMessage); + } + else + { + _logger.LogInformation(endMessage); + } + } + } + + public static class DisposableStopWatchExtension + { + public static DisposableStopWatch DisposableStopWatch(this ILogger logger, string msg = null) => new DisposableStopWatch(logger, msg); + } +}