Skip to content

Commit c7b11dc

Browse files
authored
NLogLogger - Support override of ILogMessageFormatter (#196)
1 parent a74b64b commit c7b11dc

File tree

2 files changed

+28
-24
lines changed

2 files changed

+28
-24
lines changed

src/Akka.Logger.NLog/NLogLogger.cs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/Akka.Logger.NLog/NLogMessageFormatter.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public string Format(string format, params object[] args)
3232

3333
/// <inheritdoc />
3434
public string Format(string format, IEnumerable<object> args)
35-
=> Format(format, args.ToArray());
35+
{
36+
var parameterArray = args as object[] ?? args?.ToArray();
37+
return Format(format, parameterArray);
38+
}
3639
}
3740
}

0 commit comments

Comments
 (0)