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)
{
if (logger == null) throw new ArgumentNullException(nameof(logger));
if (profiler == null) throw new ArgumentNullException(nameof(profiler));
Logger = logger;
Profiler = profiler;
}
public DisposableTimer TraceDuration(string startMessage)
{
return TraceDuration(startMessage, "Completed.");
}
public DisposableTimer TraceDuration(string startMessage, string completeMessage, string failMessage = null)
{
return new DisposableTimer(Logger, DisposableTimer.LogType.Info, Profiler, typeof(T), startMessage, completeMessage, failMessage);
}
public DisposableTimer TraceDuration(Type loggerType, string startMessage, string completeMessage, string failMessage = null)
{
return new DisposableTimer(Logger, DisposableTimer.LogType.Info, Profiler, loggerType, startMessage, completeMessage, failMessage);
}
public DisposableTimer DebugDuration(string startMessage)
{
return DebugDuration(startMessage, "Completed.");
}
public DisposableTimer DebugDuration(string startMessage, string completeMessage, string failMessage = null, int thresholdMilliseconds = 0)
{
return new DisposableTimer(Logger, DisposableTimer.LogType.Debug, Profiler, typeof(T), startMessage, completeMessage, failMessage, thresholdMilliseconds);
}
public DisposableTimer DebugDuration(Type loggerType, string startMessage, string completeMessage, string failMessage = null, int thresholdMilliseconds = 0)
{
return new DisposableTimer(Logger, DisposableTimer.LogType.Debug, Profiler, loggerType, startMessage, completeMessage, failMessage, thresholdMilliseconds);
}
}
}