using System; namespace Umbraco.Core.Logging { /// /// Provides debug or trace logging with duration management. /// public sealed class ProfilingLogger { public ILogger Logger { get; } public IProfiler Profiler { get; } public ProfilingLogger(ILogger logger, IProfiler profiler) { Logger = logger ?? throw new ArgumentNullException(nameof(logger)); Profiler = profiler ?? throw new ArgumentNullException(nameof(profiler)); } public DisposableTimer TraceDuration(string startMessage) { return TraceDuration(startMessage, "Completed."); } public DisposableTimer TraceDuration(string startMessage, string completeMessage, string failMessage = null) { return new DisposableTimer(Logger, LogLevel.Information, Profiler, typeof(T), startMessage, completeMessage, failMessage); } public DisposableTimer TraceDuration(Type loggerType, string startMessage, string completeMessage, string failMessage = null) { return new DisposableTimer(Logger, LogLevel.Information, Profiler, loggerType, startMessage, completeMessage, failMessage); } public DisposableTimer DebugDuration(string startMessage) { return Logger.IsEnabled(LogLevel.Debug) ? DebugDuration(startMessage, "Completed.") : null; } public DisposableTimer DebugDuration(string startMessage, string completeMessage, string failMessage = null, int thresholdMilliseconds = 0) { return Logger.IsEnabled(LogLevel.Debug) ? new DisposableTimer(Logger, LogLevel.Debug, Profiler, typeof(T), startMessage, completeMessage, failMessage, thresholdMilliseconds) : null; } public DisposableTimer DebugDuration(Type loggerType, string startMessage, string completeMessage, string failMessage = null, int thresholdMilliseconds = 0) { return Logger.IsEnabled(loggerType, LogLevel.Debug) ? new DisposableTimer(Logger, LogLevel.Debug, Profiler, loggerType, startMessage, completeMessage, failMessage, thresholdMilliseconds) : null; } } }