From e581eede56e93771ff821ca9e60e8df4a3579a05 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Wed, 15 May 2024 23:42:31 -0500 Subject: [PATCH] fix: match error log & console formats --- src/Pepperdash Core/Logging/Debug.cs | 2 +- .../Logging/DebugErrorLogSink.cs | 35 +++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index a5e49f4..3f3defe 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -150,7 +150,7 @@ namespace PepperDash.Core .Enrich.With(new CrestronEnricher()) .WriteTo.Sink(new DebugConsoleSink(new ExpressionTemplate("[{@t:yyyy-MM-dd HH:mm:ss.fff}][{@l:u4}][{App}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}")), levelSwitch: _consoleLoggingLevelSwitch) .WriteTo.Sink(_websocketSink, levelSwitch: _websocketLoggingLevelSwitch) - .WriteTo.Sink(new DebugErrorLogSink(), levelSwitch: _errorLogLevelSwitch) + .WriteTo.Sink(new DebugErrorLogSink(new ExpressionTemplate("[{@t:yyyy-MM-dd HH:mm:ss.fff}][{@l:u4}][{App}]{#if Key is not null}[{Key}]{#end} {@m}{#if @x is not null}\r\n{@x}{#end}")), levelSwitch: _errorLogLevelSwitch) .WriteTo.File(new RenderedCompactJsonFormatter(), logFilePath, rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Debug, diff --git a/src/Pepperdash Core/Logging/DebugErrorLogSink.cs b/src/Pepperdash Core/Logging/DebugErrorLogSink.cs index b5bbb09..3885982 100644 --- a/src/Pepperdash Core/Logging/DebugErrorLogSink.cs +++ b/src/Pepperdash Core/Logging/DebugErrorLogSink.cs @@ -1,8 +1,10 @@ using Crestron.SimplSharp; using Serilog.Core; using Serilog.Events; +using Serilog.Formatting; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,6 +13,8 @@ namespace PepperDash.Core.Logging { public class DebugErrorLogSink : ILogEventSink { + private ITextFormatter _formatter; + private Dictionary> _errorLogMap = new Dictionary> { { LogEventLevel.Verbose, (msg) => ErrorLog.Notice(msg) }, @@ -22,15 +26,27 @@ namespace PepperDash.Core.Logging }; public void Emit(LogEvent logEvent) { - var programId = CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance - ? $"App {InitialParametersClass.ApplicationNumber}" - : $"Room {InitialParametersClass.RoomId}"; + string message; - string message = $"[{logEvent.Timestamp}][{logEvent.Level}][{programId}]{logEvent.RenderMessage()}"; - - if (logEvent.Properties.TryGetValue("Key", out var value) && value is ScalarValue sv && sv.Value is string rawValue) + if (_formatter == null) { - message = $"[{logEvent.Timestamp}][{logEvent.Level}][{programId}][{rawValue}]: {logEvent.RenderMessage()}"; + var programId = CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance + ? $"App {InitialParametersClass.ApplicationNumber}" + : $"Room {InitialParametersClass.RoomId}"; + + message = $"[{logEvent.Timestamp}][{logEvent.Level}][{programId}]{logEvent.RenderMessage()}"; + + if (logEvent.Properties.TryGetValue("Key", out var value) && value is ScalarValue sv && sv.Value is string rawValue) + { + message = $"[{logEvent.Timestamp}][{logEvent.Level}][{programId}][{rawValue}]: {logEvent.RenderMessage()}"; + } + } else + { + var buffer = new StringWriter(new StringBuilder(256)); + + _formatter.Format(logEvent, buffer); + + message = buffer.ToString(); } if(!_errorLogMap.TryGetValue(logEvent.Level, out var handler)) @@ -40,5 +56,10 @@ namespace PepperDash.Core.Logging handler(message); } + + public DebugErrorLogSink(ITextFormatter formatter = null) + { + _formatter = formatter; + } } }