|
@@ -34,6 +34,76 @@ namespace Avalonia.Logging.Serilog
|
|
|
Logger.Sink = new SerilogLogger(output);
|
|
|
}
|
|
|
|
|
|
+ public bool IsEnabled(LogEventLevel level)
|
|
|
+ {
|
|
|
+ return _output.IsEnabled((SerilogLogEventLevel)level);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Log(
|
|
|
+ LogEventLevel level,
|
|
|
+ string area,
|
|
|
+ object source,
|
|
|
+ string messageTemplate)
|
|
|
+ {
|
|
|
+ Contract.Requires<ArgumentNullException>(area != null);
|
|
|
+ Contract.Requires<ArgumentNullException>(messageTemplate != null);
|
|
|
+
|
|
|
+ using (PushLogContextProperties(area, source))
|
|
|
+ {
|
|
|
+ _output.Write((SerilogLogEventLevel)level, messageTemplate);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Log<T0>(
|
|
|
+ LogEventLevel level,
|
|
|
+ string area, object source,
|
|
|
+ string messageTemplate,
|
|
|
+ T0 propertyValue0)
|
|
|
+ {
|
|
|
+ Contract.Requires<ArgumentNullException>(area != null);
|
|
|
+ Contract.Requires<ArgumentNullException>(messageTemplate != null);
|
|
|
+
|
|
|
+ using (PushLogContextProperties(area, source))
|
|
|
+ {
|
|
|
+ _output.Write((SerilogLogEventLevel)level, messageTemplate, propertyValue0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Log<T0, T1>(
|
|
|
+ LogEventLevel level,
|
|
|
+ string area,
|
|
|
+ object source,
|
|
|
+ string messageTemplate,
|
|
|
+ T0 propertyValue0,
|
|
|
+ T1 propertyValue1)
|
|
|
+ {
|
|
|
+ Contract.Requires<ArgumentNullException>(area != null);
|
|
|
+ Contract.Requires<ArgumentNullException>(messageTemplate != null);
|
|
|
+
|
|
|
+ using (PushLogContextProperties(area, source))
|
|
|
+ {
|
|
|
+ _output.Write((SerilogLogEventLevel)level, messageTemplate, propertyValue0, propertyValue1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Log<T0, T1, T2>(
|
|
|
+ LogEventLevel level,
|
|
|
+ string area,
|
|
|
+ object source,
|
|
|
+ string messageTemplate,
|
|
|
+ T0 propertyValue0,
|
|
|
+ T1 propertyValue1,
|
|
|
+ T2 propertyValue2)
|
|
|
+ {
|
|
|
+ Contract.Requires<ArgumentNullException>(area != null);
|
|
|
+ Contract.Requires<ArgumentNullException>(messageTemplate != null);
|
|
|
+
|
|
|
+ using (PushLogContextProperties(area, source))
|
|
|
+ {
|
|
|
+ _output.Write((SerilogLogEventLevel)level, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <inheritdoc/>
|
|
|
public void Log(
|
|
|
AvaloniaLogEventLevel level,
|
|
@@ -45,12 +115,40 @@ namespace Avalonia.Logging.Serilog
|
|
|
Contract.Requires<ArgumentNullException>(area != null);
|
|
|
Contract.Requires<ArgumentNullException>(messageTemplate != null);
|
|
|
|
|
|
- using (LogContext.PushProperty("Area", area))
|
|
|
- using (LogContext.PushProperty("SourceType", source?.GetType()))
|
|
|
- using (LogContext.PushProperty("SourceHash", source?.GetHashCode()))
|
|
|
+ using (PushLogContextProperties(area, source))
|
|
|
{
|
|
|
_output.Write((SerilogLogEventLevel)level, messageTemplate, propertyValues);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private static LogContextDisposable PushLogContextProperties(string area, object source)
|
|
|
+ {
|
|
|
+ return new LogContextDisposable(
|
|
|
+ LogContext.PushProperty("Area", area),
|
|
|
+ LogContext.PushProperty("SourceType", source?.GetType()),
|
|
|
+ LogContext.PushProperty("SourceHash", source?.GetHashCode())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private readonly struct LogContextDisposable : IDisposable
|
|
|
+ {
|
|
|
+ private readonly IDisposable _areaDisposable;
|
|
|
+ private readonly IDisposable _sourceTypeDisposable;
|
|
|
+ private readonly IDisposable _sourceHashDisposable;
|
|
|
+
|
|
|
+ public LogContextDisposable(IDisposable areaDisposable, IDisposable sourceTypeDisposable, IDisposable sourceHashDisposable)
|
|
|
+ {
|
|
|
+ _areaDisposable = areaDisposable;
|
|
|
+ _sourceTypeDisposable = sourceTypeDisposable;
|
|
|
+ _sourceHashDisposable = sourceHashDisposable;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Dispose()
|
|
|
+ {
|
|
|
+ _areaDisposable.Dispose();
|
|
|
+ _sourceTypeDisposable.Dispose();
|
|
|
+ _sourceHashDisposable.Dispose();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|