@@ -74,21 +74,23 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
7474 return ;
7575 }
7676
77- bool parsed = false ;
77+ LogEvent ? evt = null ;
7878 try
7979 {
80- Write ( level , eventId , state , exception , formatter , out parsed ) ;
80+ evt = PrepareWrite ( level , eventId , state , exception , formatter ) ;
8181 }
82- catch ( Exception ex ) when ( ! parsed )
82+ catch ( Exception ex )
8383 {
8484 SelfLog . WriteLine ( $ "Failed to write event through { typeof ( SerilogLogger ) . Name } : { ex } ") ;
8585 }
86+
87+ // Do not swallow exceptions from here because Serilog takes care of them in case of WriteTo and throws them back to the caller in case of AuditTo.
88+ if ( evt != null )
89+ _logger . Write ( evt ) ;
8690 }
8791
88- void Write < TState > ( LogEventLevel level , EventId eventId , TState state , Exception exception , Func < TState , Exception , string > formatter , out bool parsed )
92+ LogEvent PrepareWrite < TState > ( LogEventLevel level , EventId eventId , TState state , Exception exception , Func < TState , Exception , string > formatter )
8993 {
90- parsed = false ;
91- var logger = _logger ;
9294 string ? messageTemplate = null ;
9395
9496 var properties = new List < LogEventProperty > ( ) ;
@@ -103,17 +105,17 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
103105 }
104106 else if ( property . Key . StartsWith ( "@" ) )
105107 {
106- if ( logger . BindProperty ( GetKeyWithoutFirstSymbol ( DestructureDictionary , property . Key ) , property . Value , true , out var destructured ) )
108+ if ( _logger . BindProperty ( GetKeyWithoutFirstSymbol ( DestructureDictionary , property . Key ) , property . Value , true , out var destructured ) )
107109 properties . Add ( destructured ) ;
108110 }
109111 else if ( property . Key . StartsWith ( "$" ) )
110112 {
111- if ( logger . BindProperty ( GetKeyWithoutFirstSymbol ( StringifyDictionary , property . Key ) , property . Value ? . ToString ( ) , true , out var stringified ) )
113+ if ( _logger . BindProperty ( GetKeyWithoutFirstSymbol ( StringifyDictionary , property . Key ) , property . Value ? . ToString ( ) , true , out var stringified ) )
112114 properties . Add ( stringified ) ;
113115 }
114116 else
115117 {
116- if ( logger . BindProperty ( property . Key , property . Value , false , out var bound ) )
118+ if ( _logger . BindProperty ( property . Key , property . Value , false , out var bound ) )
117119 properties . Add ( bound ) ;
118120 }
119121 }
@@ -124,7 +126,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
124126 if ( messageTemplate == null && ! stateTypeInfo . IsGenericType )
125127 {
126128 messageTemplate = "{" + stateType . Name + ":l}" ;
127- if ( logger . BindProperty ( stateType . Name , AsLoggableValue ( state , formatter ) , false , out var stateTypeProperty ) )
129+ if ( _logger . BindProperty ( stateType . Name , AsLoggableValue ( state , formatter ) , false , out var stateTypeProperty ) )
128130 properties . Add ( stateTypeProperty ) ;
129131 }
130132 }
@@ -145,7 +147,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
145147
146148 if ( propertyName != null )
147149 {
148- if ( logger . BindProperty ( propertyName , AsLoggableValue ( state , formatter ! ) , false , out var property ) )
150+ if ( _logger . BindProperty ( propertyName , AsLoggableValue ( state , formatter ! ) , false , out var property ) )
149151 properties . Add ( property ) ;
150152 }
151153 }
@@ -154,9 +156,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
154156 properties . Add ( CreateEventIdProperty ( eventId ) ) ;
155157
156158 var parsedTemplate = MessageTemplateParser . Parse ( messageTemplate ?? "" ) ;
157- var evt = new LogEvent ( DateTimeOffset . Now , level , exception , parsedTemplate , properties ) ;
158- parsed = true ;
159- logger . Write ( evt ) ;
159+ return new LogEvent ( DateTimeOffset . Now , level , exception , parsedTemplate , properties ) ;
160160 }
161161
162162 static object ? AsLoggableValue < TState > ( TState state , Func < TState , Exception , string > formatter )
0 commit comments