@@ -74,19 +74,23 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
7474 return ;
7575 }
7676
77+ LogEvent ? evt = null ;
7778 try
7879 {
79- Write ( level , eventId , state , exception , formatter ) ;
80+ evt = PrepareWrite ( level , eventId , state , exception , formatter ) ;
8081 }
8182 catch ( Exception ex )
8283 {
8384 SelfLog . WriteLine ( $ "Failed to write event through { typeof ( SerilogLogger ) . Name } : { ex } ") ;
8485 }
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 ) ;
8590 }
8691
87- void Write < TState > ( LogEventLevel level , EventId eventId , TState state , Exception exception , Func < TState , Exception , string > formatter )
92+ LogEvent PrepareWrite < TState > ( LogEventLevel level , EventId eventId , TState state , Exception exception , Func < TState , Exception , string > formatter )
8893 {
89- var logger = _logger ;
9094 string ? messageTemplate = null ;
9195
9296 var properties = new List < LogEventProperty > ( ) ;
@@ -101,17 +105,17 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
101105 }
102106 else if ( property . Key . StartsWith ( "@" ) )
103107 {
104- 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 ) )
105109 properties . Add ( destructured ) ;
106110 }
107111 else if ( property . Key . StartsWith ( "$" ) )
108112 {
109- 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 ) )
110114 properties . Add ( stringified ) ;
111115 }
112116 else
113117 {
114- if ( logger . BindProperty ( property . Key , property . Value , false , out var bound ) )
118+ if ( _logger . BindProperty ( property . Key , property . Value , false , out var bound ) )
115119 properties . Add ( bound ) ;
116120 }
117121 }
@@ -122,7 +126,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
122126 if ( messageTemplate == null && ! stateTypeInfo . IsGenericType )
123127 {
124128 messageTemplate = "{" + stateType . Name + ":l}" ;
125- 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 ) )
126130 properties . Add ( stateTypeProperty ) ;
127131 }
128132 }
@@ -143,7 +147,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
143147
144148 if ( propertyName != null )
145149 {
146- if ( logger . BindProperty ( propertyName , AsLoggableValue ( state , formatter ! ) , false , out var property ) )
150+ if ( _logger . BindProperty ( propertyName , AsLoggableValue ( state , formatter ! ) , false , out var property ) )
147151 properties . Add ( property ) ;
148152 }
149153 }
@@ -152,8 +156,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
152156 properties . Add ( CreateEventIdProperty ( eventId ) ) ;
153157
154158 var parsedTemplate = MessageTemplateParser . Parse ( messageTemplate ?? "" ) ;
155- var evt = new LogEvent ( DateTimeOffset . Now , level , exception , parsedTemplate , properties ) ;
156- logger . Write ( evt ) ;
159+ return new LogEvent ( DateTimeOffset . Now , level , exception , parsedTemplate , properties ) ;
157160 }
158161
159162 static object ? AsLoggableValue < TState > ( TState state , Func < TState , Exception , string > formatter )
0 commit comments