|
|
|
@ -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(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|