Scope Timer
The snippet can be accessed without any authentication.
Authored by
Brandon Warner
ScopeTimer.cs 885 B
using System.Runtime.CompilerServices;
using Microsoft.Extensions.Logging;
namespace thebmw.bookshelf.openlibrary.common;
public class ScopeTimer : IDisposable
{
private readonly DateTime _start;
private readonly string _name;
private readonly LogLevel _level;
private readonly ILogger _logger;
private ScopeTimer(ILogger logger, string name, LogLevel level)
{
_start = DateTime.Now;
_logger = logger;
_name = name;
_level = level;
}
public static ScopeTimer Create(ILogger logger, LogLevel level = LogLevel.Trace, [CallerMemberName] string name = "Name Not Provided")
{
var timer = new ScopeTimer(logger, name, level);
return timer;
}
public void Dispose()
{
var duration = DateTime.Now - _start;
_logger.Log(_level, $"ScopeTimer<{_name}>({duration})");
}
}
Please register or sign in to comment