From 5b21104850b83c99f6e78b1be175bb8efed81e9c Mon Sep 17 00:00:00 2001 From: Rolf Kristensen Date: Mon, 14 Oct 2024 15:51:40 +0200 Subject: [PATCH 1/2] NLogLogger - Optimize logging of LogMessage when Parameters() is object-array --- src/Akka.Logger.NLog/NLogLogger.cs | 8 +++++++- src/Akka.Logger.NLog/NLogMessageFormatter.cs | 21 ++++++++++---------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/Akka.Logger.NLog/NLogLogger.cs b/src/Akka.Logger.NLog/NLogLogger.cs index 336506e..7d974f1 100644 --- a/src/Akka.Logger.NLog/NLogLogger.cs +++ b/src/Akka.Logger.NLog/NLogLogger.cs @@ -57,7 +57,7 @@ private static void LogEvent(NLogger logger, NLogLevel level, Exception exceptio return; var logEventInfo = logEvent.Message is LogMessage logMessage ? - new LogEventInfo(level, logger.Name, null, logMessage.Format, logMessage.Parameters().ToArray(), exception) : + new LogEventInfo(level, logger.Name, null, logMessage.Format, GetLogMessageParameterArray(logMessage), exception) : new LogEventInfo(level, logger.Name, null, "{0}", new object[] { logEvent.Message.ToString() }, exception); if (logEventInfo.TimeStamp.Kind == logEvent.Timestamp.Kind) logEventInfo.TimeStamp = logEvent.Timestamp; // Timestamp of original LogEvent (instead of async Logger thread timestamp) @@ -66,5 +66,11 @@ private static void LogEvent(NLogger logger, NLogLevel level, Exception exceptio logEventInfo.Properties["threadId"] = logEvent.Thread.ManagedThreadId; // ThreadId of the original LogEvent (instead of async Logger threadid) logger.Log(logEventInfo); } + + private static object[] GetLogMessageParameterArray(LogMessage logMessage) + { + var parameters = logMessage.Parameters(); + return parameters is object[] parameterArray ? parameterArray : parameters?.ToArray(); + } } } diff --git a/src/Akka.Logger.NLog/NLogMessageFormatter.cs b/src/Akka.Logger.NLog/NLogMessageFormatter.cs index f69602a..793a19c 100644 --- a/src/Akka.Logger.NLog/NLogMessageFormatter.cs +++ b/src/Akka.Logger.NLog/NLogMessageFormatter.cs @@ -6,23 +6,21 @@ namespace Akka.Logger.NLog { - /// /// /// This class contains methods used to convert MessageTemplated messages /// into normal text messages. /// + /// + /// You need to enable the Akka.Logger.NLog.NLogMessageFormatter across your entire ActorSystem - this will replace Akka.NET's default ILogMessageFormatter with NLog's. + /// + /// You can accomplish this by setting the akka.logger-formatter setting like below: + /// + /// akka.logger-formatter="Akka.Logger.NLog.NLogMessageFormatter, Akka.Logger.NLog" + /// + /// public class NLogMessageFormatter : ILogMessageFormatter { - /// - /// Converts the specified template string to a text string using the specified - /// token array to match replacements. - /// - /// The template string used in the conversion. - /// The array that contains values to replace in the template. - /// - /// A text string where the template placeholders have been replaced with - /// their corresponding values. - /// + /// public string Format(string format, params object[] args) { if (args?.Length > 0) @@ -32,6 +30,7 @@ public string Format(string format, params object[] args) return format; } + /// public string Format(string format, IEnumerable args) => Format(format, args.ToArray()); } From eb9d6376c170c9283c5ac304e377eb7ac37ee7f2 Mon Sep 17 00:00:00 2001 From: Rolf Kristensen Date: Mon, 14 Oct 2024 16:22:03 +0200 Subject: [PATCH 2/2] Updated dependencies for the unit-test-project --- src/Akka.Logger.NLog.Tests/Akka.Logger.NLog.Tests.csproj | 6 ++++-- src/Directory.Packages.props | 7 +++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Akka.Logger.NLog.Tests/Akka.Logger.NLog.Tests.csproj b/src/Akka.Logger.NLog.Tests/Akka.Logger.NLog.Tests.csproj index 34e206f..8af6c2b 100644 --- a/src/Akka.Logger.NLog.Tests/Akka.Logger.NLog.Tests.csproj +++ b/src/Akka.Logger.NLog.Tests/Akka.Logger.NLog.Tests.csproj @@ -6,8 +6,10 @@ - - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 6f21cb9..78a2c79 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -10,14 +10,13 @@ - - - + + - + \ No newline at end of file