Skip to content

Commit 9fc84d1

Browse files
committed
Do not swallow exception from Audit
1 parent 8fd1fa4 commit 9fc84d1

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/Serilog.Extensions.Logging/Extensions/Logging/SerilogLogger.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,20 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
7474
return;
7575
}
7676

77+
bool parsed = false;
7778
try
7879
{
79-
Write(level, eventId, state, exception, formatter);
80+
Write(level, eventId, state, exception, formatter, out parsed);
8081
}
81-
catch (Exception ex)
82+
catch (Exception ex) when (!parsed)
8283
{
8384
SelfLog.WriteLine($"Failed to write event through {typeof(SerilogLogger).Name}: {ex}");
8485
}
8586
}
8687

87-
void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
88+
void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter, out bool parsed)
8889
{
90+
parsed = false;
8991
var logger = _logger;
9092
string? messageTemplate = null;
9193

@@ -153,6 +155,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
153155

154156
var parsedTemplate = MessageTemplateParser.Parse(messageTemplate ?? "");
155157
var evt = new LogEvent(DateTimeOffset.Now, level, exception, parsedTemplate, properties);
158+
parsed = true;
156159
logger.Write(evt);
157160
}
158161

test/Serilog.Extensions.Logging.Tests/SerilogLoggerTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Serilog.Debugging;
88
using Serilog.Extensions.Logging.Tests.Support;
99
using Xunit;
10+
using Serilog.Core;
1011

1112
namespace Serilog.Extensions.Logging.Tests;
1213

@@ -469,4 +470,27 @@ public void MismatchedMessageTemplateParameterCountIsHandled()
469470

470471
Assert.Empty(sink.Writes);
471472
}
473+
474+
[Fact]
475+
public void ExceptionFromAuditSinkIsUnhandled()
476+
{
477+
var serilogLogger = new LoggerConfiguration()
478+
.AuditTo.Sink(new MySink())
479+
.CreateLogger();
480+
481+
var provider = new SerilogLoggerProvider(serilogLogger);
482+
var logger = provider.CreateLogger(Name);
483+
484+
var ex = Assert.Throws<AggregateException>(() => logger.LogInformation("Normal text"));
485+
Assert.IsType<NotImplementedException>(ex.InnerException);
486+
Assert.Equal("Oops", ex.InnerException.Message);
487+
}
488+
489+
private class MySink : ILogEventSink
490+
{
491+
public void Emit(LogEvent logEvent)
492+
{
493+
throw new NotImplementedException("Oops");
494+
}
495+
}
472496
}

0 commit comments

Comments
 (0)