@@ -74,21 +74,23 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
74
74
return ;
75
75
}
76
76
77
- bool parsed = false ;
77
+ LogEvent ? evt = null ;
78
78
try
79
79
{
80
- Write ( level , eventId , state , exception , formatter , out parsed ) ;
80
+ evt = PrepareWrite ( level , eventId , state , exception , formatter ) ;
81
81
}
82
- catch ( Exception ex ) when ( ! parsed )
82
+ catch ( Exception ex )
83
83
{
84
84
SelfLog . WriteLine ( $ "Failed to write event through { typeof ( SerilogLogger ) . Name } : { ex } ") ;
85
85
}
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 ) ;
86
90
}
87
91
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 )
89
93
{
90
- parsed = false ;
91
- var logger = _logger ;
92
94
string ? messageTemplate = null ;
93
95
94
96
var properties = new List < LogEventProperty > ( ) ;
@@ -103,17 +105,17 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
103
105
}
104
106
else if ( property . Key . StartsWith ( "@" ) )
105
107
{
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 ) )
107
109
properties . Add ( destructured ) ;
108
110
}
109
111
else if ( property . Key . StartsWith ( "$" ) )
110
112
{
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 ) )
112
114
properties . Add ( stringified ) ;
113
115
}
114
116
else
115
117
{
116
- if ( logger . BindProperty ( property . Key , property . Value , false , out var bound ) )
118
+ if ( _logger . BindProperty ( property . Key , property . Value , false , out var bound ) )
117
119
properties . Add ( bound ) ;
118
120
}
119
121
}
@@ -124,7 +126,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
124
126
if ( messageTemplate == null && ! stateTypeInfo . IsGenericType )
125
127
{
126
128
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 ) )
128
130
properties . Add ( stateTypeProperty ) ;
129
131
}
130
132
}
@@ -145,7 +147,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
145
147
146
148
if ( propertyName != null )
147
149
{
148
- if ( logger . BindProperty ( propertyName , AsLoggableValue ( state , formatter ! ) , false , out var property ) )
150
+ if ( _logger . BindProperty ( propertyName , AsLoggableValue ( state , formatter ! ) , false , out var property ) )
149
151
properties . Add ( property ) ;
150
152
}
151
153
}
@@ -154,9 +156,7 @@ void Write<TState>(LogEventLevel level, EventId eventId, TState state, Exception
154
156
properties . Add ( CreateEventIdProperty ( eventId ) ) ;
155
157
156
158
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 ) ;
160
160
}
161
161
162
162
static object ? AsLoggableValue < TState > ( TState state , Func < TState , Exception , string > formatter )
0 commit comments