From 15024b57f2a5d1c73cb9a0069117a711241a4b2e Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 22 Nov 2023 14:03:01 -0700 Subject: [PATCH] feat: adds console sink for Serilog --- src/Pepperdash Core/Logging/Debug.cs | 78 +++++++++++-------- .../Logging/DebugConsoleSink.cs | 50 ++++++++++++ .../Logging/DebugWebsocketSink.cs | 31 -------- 3 files changed, 97 insertions(+), 62 deletions(-) create mode 100644 src/Pepperdash Core/Logging/DebugConsoleSink.cs diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Pepperdash Core/Logging/Debug.cs index e8bebe8..dbd8e68 100644 --- a/src/Pepperdash Core/Logging/Debug.cs +++ b/src/Pepperdash Core/Logging/Debug.cs @@ -85,7 +85,7 @@ namespace PepperDash.Core private const int SaveTimeoutMs = 30000; - private static bool _runningOnAppliance = CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance; + public static bool IsRunningOnAppliance = CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance; /// /// Version for the currently loaded PepperDashCore dll @@ -108,12 +108,13 @@ namespace PepperDash.Core { _consoleLoggingLevelSwitch = new LoggingLevelSwitch(initialMinimumLevel: LogEventLevel.Information); _websocketLoggingLevelSwitch = new LoggingLevelSwitch(); - _websocketSink = new DebugWebsocketSink(new JsonFormatter()); + _websocketSink = new DebugWebsocketSink(new JsonFormatter(renderMessage: true)); // Instantiate the root logger _logger = new LoggerConfiguration() //.WriteTo.Logger(lc => lc //.WriteTo.Console(levelSwitch: _consoleLoggingLevelSwitch)) + .WriteTo.Sink(new DebugConsoleSink(new JsonFormatter(renderMessage: true)), levelSwitch: _consoleLoggingLevelSwitch) .WriteTo.Sink(_websocketSink, levelSwitch: _websocketLoggingLevelSwitch) .WriteTo.File(@"\user\debug\global-log-{Date}.txt" , rollingInterval: RollingInterval.Day @@ -438,6 +439,18 @@ namespace PepperDash.Core } + private static void LogMessage(uint level, string message) + { + _logger.Write((LogEventLevel)level, message); + } + + private static void LogMessage(uint level, string message, IKeyed keyed) + { + var log = _logger.ForContext("Key", keyed.Key); + log.Write((LogEventLevel)level, message); + } + + /// /// Prints message to console if current debug level is equal to or higher than the level of this message. /// Uses CrestronConsole.PrintLine. @@ -459,13 +472,13 @@ namespace PepperDash.Core _logger.Write((LogEventLevel)level, message); - if (_runningOnAppliance) - { - CrestronConsole.PrintLine("[{0}]App {1} Lvl {2}:{3}", DateTime.Now.ToString("HH:mm:ss.fff"), - InitialParametersClass.ApplicationNumber, - level, - string.Format(format, items)); - } + //if (IsRunningOnAppliance) + //{ + // CrestronConsole.PrintLine("[{0}]App {1} Lvl {2}:{3}", DateTime.Now.ToString("HH:mm:ss.fff"), + // InitialParametersClass.ApplicationNumber, + // level, + // string.Format(format, items)); + //} } /// @@ -473,13 +486,10 @@ namespace PepperDash.Core /// public static void Console(uint level, IKeyed dev, string format, params object[] items) { - var log = _logger.ForContext("Key", dev.Key); - var message = string.Format(format, items); + LogMessage(level, string.Format(format, items), dev); - log.Write((LogEventLevel)level, message); - - if (Level >= level) - Console(level, "[{0}] {1}", dev.Key, message); + //if (Level >= level) + // Console(level, "[{0}] {1}", dev.Key, message); } /// @@ -496,15 +506,17 @@ namespace PepperDash.Core LogError(errorLogLevel, str); } - var log = _logger.ForContext("Key", dev.Key); - var message = string.Format(format, items); + LogMessage(level, str, dev); - log.Write((LogEventLevel)level, message); + //var log = _logger.ForContext("Key", dev.Key); + //var message = string.Format(format, items); - if (Level >= level) - { - Console(level, str); - } + //log.Write((LogEventLevel)level, message); + + //if (Level >= level) + //{ + // Console(level, str); + //} } /// @@ -518,10 +530,12 @@ namespace PepperDash.Core { LogError(errorLogLevel, str); } - if (Level >= level) - { - Console(level, str); - } + + LogMessage(level, str); + //if (Level >= level) + //{ + // Console(level, str); + //} } /// @@ -532,8 +546,9 @@ namespace PepperDash.Core public static void ConsoleWithLog(uint level, string format, params object[] items) { var str = string.Format(format, items); - if (Level >= level) - CrestronConsole.PrintLine("App {0}:{1}", InitialParametersClass.ApplicationNumber, str); + //if (Level >= level) + // CrestronConsole.PrintLine("App {0}:{1}", InitialParametersClass.ApplicationNumber, str); + LogMessage(level, str); CrestronLogger.WriteToLog(str, level); } @@ -545,8 +560,9 @@ namespace PepperDash.Core public static void ConsoleWithLog(uint level, IKeyed dev, string format, params object[] items) { var str = string.Format(format, items); - if (Level >= level) - ConsoleWithLog(level, "[{0}] {1}", dev.Key, str); + + LogMessage(level, str, dev); + CrestronLogger.WriteToLog(string.Format("[{0}] {1}", dev.Key, str), level); } /// @@ -557,7 +573,7 @@ namespace PepperDash.Core public static void LogError(ErrorLogLevel errorLogLevel, string str) { - var msg = _runningOnAppliance ? string.Format("App {0}:{1}", InitialParametersClass.ApplicationNumber, str) : string.Format("Room {0}:{1}", InitialParametersClass.RoomId, str); + var msg = IsRunningOnAppliance ? string.Format("App {0}:{1}", InitialParametersClass.ApplicationNumber, str) : string.Format("Room {0}:{1}", InitialParametersClass.RoomId, str); switch (errorLogLevel) { case ErrorLogLevel.Error: diff --git a/src/Pepperdash Core/Logging/DebugConsoleSink.cs b/src/Pepperdash Core/Logging/DebugConsoleSink.cs new file mode 100644 index 0000000..9af051c --- /dev/null +++ b/src/Pepperdash Core/Logging/DebugConsoleSink.cs @@ -0,0 +1,50 @@ +using Crestron.SimplSharp; +using Serilog.Configuration; +using Serilog; +using Serilog.Core; +using Serilog.Events; +using Serilog.Formatting; +using Serilog.Formatting.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Text; +using System.Threading.Tasks; + +namespace PepperDash.Core +{ + internal class DebugConsoleSink : ILogEventSink + { + private readonly ITextFormatter _textFormatter; + + public void Emit(LogEvent logEvent) + { + if (!Debug.IsRunningOnAppliance) return; + + CrestronConsole.PrintLine("[{0}]App {1} Lvl {2}:{3}", logEvent.Timestamp, + InitialParametersClass.ApplicationNumber, + logEvent.Level, + logEvent.RenderMessage()); + } + + public DebugConsoleSink(ITextFormatter formatProvider) + { + + _textFormatter = formatProvider ?? new JsonFormatter(); + + } + + } + + public static class DebugConsoleSinkExtensions + { + public static LoggerConfiguration DebugConsoleSink( + this LoggerSinkConfiguration loggerConfiguration, + ITextFormatter formatProvider = null) + { + return loggerConfiguration.Sink(new DebugConsoleSink(formatProvider)); + } + } + +} diff --git a/src/Pepperdash Core/Logging/DebugWebsocketSink.cs b/src/Pepperdash Core/Logging/DebugWebsocketSink.cs index 3cb0d49..3dd2606 100644 --- a/src/Pepperdash Core/Logging/DebugWebsocketSink.cs +++ b/src/Pepperdash Core/Logging/DebugWebsocketSink.cs @@ -157,37 +157,6 @@ namespace PepperDash.Core }; Debug.Console(0, "Starting"); - //_httpsServer.OnGet += (sender, e) => - //{ - // Debug.Console(0, $"OnGet requesting {e.Request}"); - // var req = e.Request; - // var res = e.Response; - - // var path = req.RawUrl; - - // if (path == "/") - // path += "index.html"; - - // var localPath = Path.Combine(rootPath, path.Substring(1)); - - // byte[] contents; - // if (File.Exists(localPath)) - // contents = File.ReadAllBytes(localPath); - // else - // { - // e.Response.StatusCode = 404; - // contents = Encoding.UTF8.GetBytes("Path not found " + e.Request.RawUrl); - // } - - // var extention = Path.GetExtension(path); - // if (!_contentTypes.TryGetValue(extention, out var contentType)) - // contentType = "text/html"; - - // res.ContentLength64 = contents.LongLength; - - // res.Close(contents, true); - //}; - _httpsServer.Start(); Debug.Console(0, "Ready"); }