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 @@ +