Skip to content
Snippets Groups Projects

Scope Timer

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    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})");
        }
    }
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment