void Write(ILogger target, LogEventLevel level, string outcome) { _completionBehaviour = CompletionBehaviourDebug.Silent; var elapsed = _stopwatch.Elapsed.TotalMilliseconds; target.Write(level, $"{_messageTemplate} {{{nameof(Properties.Outcome)}}} in {{{nameof(Properties.Elapsed)}:0.0}} ms", _args.Concat(new object[] { outcome, elapsed }).ToArray()); PopLogContext(); }
internal OperationDebug(ILogger target, string messageTemplate, object[] args, CompletionBehaviourDebug completionBehaviour, LogEventLevel completionLevel, LogEventLevel abandonmentLevel) { if (target == null) throw new ArgumentNullException(nameof(target)); if (messageTemplate == null) throw new ArgumentNullException(nameof(messageTemplate)); if (args == null) throw new ArgumentNullException(nameof(args)); _target = target; _messageTemplate = messageTemplate; _args = args; _completionBehaviour = completionBehaviour; _completionLevel = completionLevel; _abandonmentLevel = abandonmentLevel; _popContext = LogContext.PushProperty(nameof(Properties.OperationId), Guid.NewGuid()); _stopwatch = Stopwatch.StartNew(); }
/// <summary> /// Cancel the timed operation. After calling, no event will be recorded either through /// completion or disposal. /// </summary> public void Cancel() { _completionBehaviour = CompletionBehaviourDebug.Silent; PopLogContext(); }