Allows Serilog to be configured in a serilog.user.config file that will not effect the main umbraco logger
Adds in support for filtering expressions - so the user logger configuration can filter by including or excluding on an expression - common use case to include only my namespace from SourceContext thjat starts with xyz
This commit is contained in:
@@ -7,6 +7,7 @@ using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Diagnostics;
|
||||
using Serilog;
|
||||
using Serilog.Events;
|
||||
using Serilog.Filters;
|
||||
using Serilog.Formatting.Compact;
|
||||
using Umbraco.Core.Logging.SerilogExtensions;
|
||||
|
||||
@@ -34,9 +35,9 @@ namespace Umbraco.Core.Logging
|
||||
Serilog.Debugging.SelfLog.Enable(msg => System.Diagnostics.Debug.WriteLine(msg));
|
||||
|
||||
//Set this environment variable - so that it can be used in external config file
|
||||
//add key="serilog:write-to:RollingFile.pathFormat" value="%BASEDIR%\logs\log-{Date}.txt" />
|
||||
//add key="serilog:write-to:RollingFile.pathFormat" value="%BASEDIR%\logs\log.txt" />
|
||||
Environment.SetEnvironmentVariable("BASEDIR", AppDomain.CurrentDomain.BaseDirectory, EnvironmentVariableTarget.Process);
|
||||
|
||||
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
.MinimumLevel.Verbose() //Set to highest level of logging (as any sinks may want to restrict it to Errors only)
|
||||
.Enrich.WithProcessId()
|
||||
@@ -61,9 +62,12 @@ namespace Umbraco.Core.Logging
|
||||
retainedFileCountLimit: null, //Setting to null means we keep all files - default is 31 days
|
||||
restrictedToMinimumLevel: LogEventLevel.Verbose)
|
||||
|
||||
//A nested logger - where any configured sinks do not effect
|
||||
//Read from main serilog.config file
|
||||
.ReadFrom.AppSettings(filePath: AppDomain.CurrentDomain.BaseDirectory + @"\config\serilog.config")
|
||||
|
||||
//A nested logger - where any user configured sinks via config can not effect the main 'umbraco' logger above
|
||||
.WriteTo.Logger(cfg =>
|
||||
cfg.ReadFrom.AppSettings(filePath: AppDomain.CurrentDomain.BaseDirectory + @"\config\serilog.config"))
|
||||
cfg.ReadFrom.AppSettings(filePath: AppDomain.CurrentDomain.BaseDirectory + @"\config\serilog.user.config"))
|
||||
.CreateLogger();
|
||||
}
|
||||
|
||||
|
||||
@@ -83,6 +83,9 @@
|
||||
<PackageReference Include="Serilog.Enrichers.Thread">
|
||||
<Version>3.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog.Filters.Expressions">
|
||||
<Version>2.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog.Formatting.Compact">
|
||||
<Version>1.0.0</Version>
|
||||
</PackageReference>
|
||||
|
||||
@@ -279,6 +279,9 @@
|
||||
<DependentUpon>HealthChecks.config</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<Content Include="Config\serilog.user.config">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
<Content Include="Config\serilog.config">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
|
||||
@@ -1,22 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<!-- Controls log levels for all sinks (Set this higher than child sinks) -->
|
||||
|
||||
<!-- Used to toggle the loge levels for the main Umbraco log files -->
|
||||
<!-- Found at /app_data/logs/ -->
|
||||
<!-- NOTE: Changing this will also flow down into serilog.user.config -->
|
||||
<add key="serilog:minimum-level" value="Verbose" />
|
||||
|
||||
<!-- Write to a user log file -->
|
||||
<add key="serilog:using:File" value="Serilog.Sinks.File" />
|
||||
<add key="serilog:write-to:File.path" value="%BASEDIR%\logs\warren-log.txt" /><!-- Can we do a relative path to website ? -->
|
||||
<add key="serilog:write-to:File.restrictedToMinimumLevel" value="Debug" />
|
||||
<add key="serilog:write-to:File.retainedFileCountLimit" value="32" /> <!-- Number of log files to keep (or remove value to keep all files) -->
|
||||
<add key="serilog:write-to:File.rollingInterval" value="Day" /> <!-- Create a new log file every Minute/Hour/Day/Month/Year/infinite -->
|
||||
|
||||
<!--
|
||||
TODO
|
||||
* Path relative to the site
|
||||
* Filter logfile to my own namespace only
|
||||
* Have multiple file sink configs (One for main CMS, so it can be fine tuned & another for customer needs if they want to)
|
||||
-->
|
||||
<!-- To write to new log locations (aka Sinks) such as your own .txt files, ELMAH.io, Elastic, SEQ -->
|
||||
<!-- Please use the serilog.user.config file to configure your own logging needs -->
|
||||
|
||||
</appSettings>
|
||||
</configuration>
|
||||
|
||||
29
src/Umbraco.Web.UI/config/serilog.user.config
Normal file
29
src/Umbraco.Web.UI/config/serilog.user.config
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
|
||||
<!-- Controls log levels for all user-definied child sub-logger sinks configured here (Set this higher than child sinks) -->
|
||||
<add key="serilog:minimum-level" value="Verbose" />
|
||||
|
||||
<!-- For Different Namespaces - Set different logging levels -->
|
||||
<add key="serilog:minimum-level:override:Microsoft" value="Warning" />
|
||||
<add key="serilog:minimum-level:override:Microsoft.AspNetCore.Mvc" value="Error" />
|
||||
<add key="serilog:minimum-level:override:YourNameSpace" value="Information" />
|
||||
|
||||
<!-- All logs definied via user.config will contain this property (won't be in main Umbraco logs) -->
|
||||
<add key="serilog:enrich:with-property:websiteName" value="Warrens Website" />
|
||||
|
||||
<!-- Write to a user log file -->
|
||||
<add key="serilog:using:File" value="Serilog.Sinks.File" />
|
||||
<add key="serilog:write-to:File.path" value="%BASEDIR%\logs\warren-log.txt" />
|
||||
<add key="serilog:write-to:File.restrictedToMinimumLevel" value="Debug" /> <!-- I will be ignored as Debug as the user logging pipleine has it min set to Information, so only Info will flow through me -->
|
||||
<add key="serilog:write-to:File.retainedFileCountLimit" value="32" /> <!-- Number of log files to keep (or remove value to keep all files) -->
|
||||
<add key="serilog:write-to:File.rollingInterval" value="Day" /> <!-- Create a new log file every Minute/Hour/Day/Month/Year/infinite -->
|
||||
|
||||
<!-- Filters all above sink's to use this expression -->
|
||||
<!-- Common use case is to include SourceType starting with your own namespace -->
|
||||
<add key="serilog:using:FilterExpressions" value="Serilog.Filters.Expressions" />
|
||||
<add key="serilog:filter:ByIncluding.expression" value="StartsWith(SourceContext, 'Umbraco.Core')" />
|
||||
|
||||
</appSettings>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user