From b89e7bca970a4e54f4db5b57019e6f7bb2d2f7bf Mon Sep 17 00:00:00 2001 From: Warren Date: Wed, 1 Aug 2018 10:33:38 +0100 Subject: [PATCH] Adds our Serilog Enricher so that we can map Serilog log levels to Log4Net levels and use it the text log file so that the logfiles still look the same as previously --- src/Umbraco.Core/Logging/Logger.cs | 4 +- .../Log4NetLevelMapperEnricher.cs | 46 +++++++++++++++++++ src/Umbraco.Core/Umbraco.Core.csproj | 1 + 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Core/Logging/SerilogExtensions/Log4NetLevelMapperEnricher.cs diff --git a/src/Umbraco.Core/Logging/Logger.cs b/src/Umbraco.Core/Logging/Logger.cs index b39ec95215..0dbfa4719f 100644 --- a/src/Umbraco.Core/Logging/Logger.cs +++ b/src/Umbraco.Core/Logging/Logger.cs @@ -8,6 +8,7 @@ using Umbraco.Core.Diagnostics; using Serilog; using Serilog.Events; using Serilog.Formatting.Compact; +using Umbraco.Core.Logging.SerilogExtensions; namespace Umbraco.Core.Logging { @@ -43,6 +44,7 @@ namespace Umbraco.Core.Logging .Enrich.WithThreadId() .Enrich.WithProperty("AppDomainId", AppDomain.CurrentDomain.Id) .Enrich.WithProperty("AppDomainAppId", HttpRuntime.AppDomainAppId.ReplaceNonAlphanumericChars(string.Empty)) + .Enrich.With() //Main .txt logfile - in similar format to older Log4Net output //Ends with ..txt as Date is inserted before file extension substring @@ -50,7 +52,7 @@ namespace Umbraco.Core.Logging rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Debug, retainedFileCountLimit: null, //Setting to null means we keep all files - default is 31 days - outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss,fff} [P{ProcessId}/D{AppDomainId}/T{ThreadId}] {Level:u4} {Message:lj}{NewLine}{Exception}") + outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss,fff} [P{ProcessId}/D{AppDomainId}/T{ThreadId}] {Log4NetLevel} {Message:lj}{NewLine}{Exception}") //.clef format (Compact log event format, that can be imported into local SEQ & will make searching/filtering logs easier) //Ends with ..txt as Date is inserted before file extension substring diff --git a/src/Umbraco.Core/Logging/SerilogExtensions/Log4NetLevelMapperEnricher.cs b/src/Umbraco.Core/Logging/SerilogExtensions/Log4NetLevelMapperEnricher.cs new file mode 100644 index 0000000000..ea1027c214 --- /dev/null +++ b/src/Umbraco.Core/Logging/SerilogExtensions/Log4NetLevelMapperEnricher.cs @@ -0,0 +1,46 @@ +using Serilog.Core; +using Serilog.Events; + +namespace Umbraco.Core.Logging.SerilogExtensions +{ + /// + /// This is used to create a new property in Logs called 'Log4NetLevel' + /// So that we can map Serilog levels to Log4Net levels - so log files stay consistent + /// + public class Log4NetLevelMapperEnricher : ILogEventEnricher + { + public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) + { + var log4NetLevel = string.Empty; + + switch (logEvent.Level) + { + case LogEventLevel.Debug: + log4NetLevel = "DEBUG"; + break; + + case LogEventLevel.Error: + log4NetLevel = "ERROR"; + break; + + case LogEventLevel.Fatal: + log4NetLevel = "FATAL"; + break; + + case LogEventLevel.Information: + log4NetLevel = "INFO"; + break; + + case LogEventLevel.Verbose: + log4NetLevel = "ALL"; + break; + + case LogEventLevel.Warning: + log4NetLevel = "WARN"; + break; + } + + logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("Log4NetLevel", log4NetLevel)); + } + } +} diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index fddf62bdb6..9952ab6b76 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -326,6 +326,7 @@ +