@@ -26,51 +26,52 @@ public class NLogLogger : ReceiveActor, IRequiresMessageQueue<ILoggerMessageQueu
2626 {
2727 private readonly ILoggingAdapter _log = Logging . GetLogger ( Context . System . EventStream , "NLogLogger" ) ;
2828
29- private static void Log ( LogEvent logEvent , Action < NLogger , LogEvent > logStatement )
30- {
31- var loggerName = ( logEvent . LogClass == typeof ( DummyClassForStringSources ) || logEvent . LogClass . GenericTypeArguments ? . Length != 0 )
32- ? logEvent . LogSource
33- : logEvent . LogClass . ToString ( ) ; // Include full namespace, but not assembly name
34- var logger = LogManager . GetLogger ( loggerName ) ;
35- logStatement ( logger , logEvent ) ;
36- }
37-
3829 /// <summary>
3930 /// Initializes a new instance of the <see cref="NLogLogger"/> class.
4031 /// </summary>
4132 public NLogLogger ( )
4233 {
43- Receive < Error > ( m => Log ( m , ( logger , logEvent ) => LogEvent ( logger , NLogLevel . Error , logEvent . Cause , logEvent ) ) ) ;
44- Receive < Warning > ( m => Log ( m , ( logger , logEvent ) => LogEvent ( logger , NLogLevel . Warn , logEvent . Cause , logEvent ) ) ) ;
45- Receive < Info > ( m => Log ( m , ( logger , logEvent ) => LogEvent ( logger , NLogLevel . Info , logEvent . Cause , logEvent ) ) ) ;
46- Receive < Debug > ( m => Log ( m , ( logger , logEvent ) => LogEvent ( logger , NLogLevel . Debug , logEvent . Cause , logEvent ) ) ) ;
34+ Receive < Error > ( static evt => LogEvent ( evt , NLogLevel . Error ) ) ;
35+ Receive < Warning > ( static evt => LogEvent ( evt , NLogLevel . Warn ) ) ;
36+ Receive < Info > ( static evt => LogEvent ( evt , NLogLevel . Info ) ) ;
37+ Receive < Debug > ( static evt => LogEvent ( evt , NLogLevel . Debug ) ) ;
4738 Receive < InitializeLogger > ( m =>
4839 {
4940 _log . Info ( "NLogLogger started" ) ;
5041 Sender . Tell ( new LoggerInitialized ( ) ) ;
5142 } ) ;
5243 }
5344
54- private static void LogEvent ( NLogger logger , NLogLevel level , Exception exception , LogEvent logEvent )
45+ private static void LogEvent ( LogEvent logEvent , NLogLevel logLevel )
5546 {
56- if ( ! logger . IsEnabled ( level ) )
47+ var loggerName = ( logEvent . LogClass == typeof ( DummyClassForStringSources ) || logEvent . LogClass . GenericTypeArguments ? . Length != 0 )
48+ ? logEvent . LogSource
49+ : logEvent . LogClass . ToString ( ) ; // Include full namespace, but not assembly name
50+ var logger = LogManager . GetLogger ( loggerName ) ;
51+ if ( ! logger . IsEnabled ( logLevel ) )
5752 return ;
58-
59- var logEventInfo = logEvent . Message is LogMessage logMessage ?
60- new LogEventInfo ( level , logger . Name , null , logMessage . Format , GetLogMessageParameterArray ( logMessage ) , exception ) :
61- new LogEventInfo ( level , logger . Name , null , "{0}" , new object [ ] { logEvent . Message . ToString ( ) } , exception ) ;
53+
54+ LogEventInfo logEventInfo = CreateLogEventInfo ( logger , logLevel , logEvent ) ;
6255 if ( logEventInfo . TimeStamp . Kind == logEvent . Timestamp . Kind )
6356 logEventInfo . TimeStamp = logEvent . Timestamp ; // Timestamp of original LogEvent (instead of async Logger thread timestamp)
6457 logEventInfo . Properties [ "logSource" ] = logEvent . LogSource ;
65- logEventInfo . Properties [ "actorPath" ] = Context ? . Sender ? . Path ? . ToString ( ) ?? string . Empty ; // Same as Serilog
58+ var actorPath = Context ? . Sender ? . Path ? . ToString ( ) ;
59+ if ( ! string . IsNullOrEmpty ( actorPath ) )
60+ logEventInfo . Properties [ "actorPath" ] = actorPath ; // Same as Serilog
6661 logEventInfo . Properties [ "threadId" ] = logEvent . Thread . ManagedThreadId ; // ThreadId of the original LogEvent (instead of async Logger threadid)
6762 logger . Log ( logEventInfo ) ;
6863 }
6964
70- private static object [ ] GetLogMessageParameterArray ( LogMessage logMessage )
65+ private static LogEventInfo CreateLogEventInfo ( NLogger logger , NLogLevel level , LogEvent logEvent )
7166 {
72- var parameters = logMessage . Parameters ( ) ;
73- return parameters is object [ ] parameterArray ? parameterArray : parameters ? . ToArray ( ) ;
67+ if ( logEvent . Message is LogMessage logMessage )
68+ {
69+ var parameters = logMessage . Parameters ( ) ;
70+ var parameterArray = parameters as object [ ] ?? parameters ? . ToArray ( ) ;
71+ return new LogEventInfo ( level , logger . Name , null , logMessage . Format , parameterArray , logEvent . Cause ) ;
72+ }
73+
74+ return new LogEventInfo ( level , logger . Name , null , "{0}" , new object [ ] { logEvent . Message } , logEvent . Cause ) ;
7475 }
7576 }
7677}
0 commit comments