diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..112f424
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,23 @@
+root = true
+
+[*]
+trim_trailing_whitespace = true
+insert_final_newline = true
+indent_style = space
+indent_size = 4
+charset = utf-8
+end_of_line = lf
+
+[*.{csproj,json,config,yml,props}]
+indent_size = 2
+
+[*.sh]
+end_of_line = lf
+
+[*.{cmd, bat}]
+end_of_line = crlf
+
+# C# formatting settings - Namespace options
+csharp_style_namespace_declarations = file_scoped:suggestion
+
+csharp_style_prefer_switch_expression = true:suggestion
\ No newline at end of file
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..3883932
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,13 @@
+
+
+
+ latest
+ True
+ true
+ $(MSBuildThisFileDirectory)assets/Serilog.snk
+ true
+ enable
+ enable
+
+
+
\ No newline at end of file
diff --git a/Directory.Build.targets b/Directory.Build.targets
new file mode 100644
index 0000000..faf2349
--- /dev/null
+++ b/Directory.Build.targets
@@ -0,0 +1,3 @@
+
+
+
diff --git a/global.json b/global.json
deleted file mode 100644
index e3bbb00..0000000
--- a/global.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "sdk": {
- "allowPrerelease": false,
- "version": "3.1.100",
- "rollForward": "latestFeature"
- }
-}
diff --git a/samples/Sample/Program.cs b/samples/Sample/Program.cs
index 03014b7..9ba6bf0 100644
--- a/samples/Sample/Program.cs
+++ b/samples/Sample/Program.cs
@@ -1,79 +1,77 @@
-using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Extensions.Logging;
-namespace Sample
+namespace Sample;
+
+public class Program
{
- public class Program
+ public static void Main(string[] args)
{
- public static void Main(string[] args)
+ // Creating a `LoggerProviderCollection` lets Serilog optionally write
+ // events through other dynamically-added MEL ILoggerProviders.
+ var providers = new LoggerProviderCollection();
+
+ Log.Logger = new LoggerConfiguration()
+ .MinimumLevel.Debug()
+ .WriteTo.Console()
+ .WriteTo.Providers(providers)
+ .CreateLogger();
+
+ var services = new ServiceCollection();
+
+ services.AddSingleton(providers);
+ services.AddSingleton(sc =>
+ {
+ var providerCollection = sc.GetService();
+ var factory = new SerilogLoggerFactory(null, true, providerCollection);
+
+ foreach (var provider in sc.GetServices())
+ factory.AddProvider(provider);
+
+ return factory;
+ });
+
+ services.AddLogging(l => l.AddConsole());
+
+ var serviceProvider = services.BuildServiceProvider();
+ var logger = serviceProvider.GetRequiredService>();
+
+ var startTime = DateTimeOffset.UtcNow;
+ logger.LogInformation(1, "Started at {StartTime} and 0x{Hello:X} is hex of 42", startTime, 42);
+
+ try
+ {
+ throw new Exception("Boom!");
+ }
+ catch (Exception ex)
+ {
+ logger.LogCritical("Unexpected critical error starting application", ex);
+ logger.Log(LogLevel.Critical, 0, "Unexpected critical error", ex, null!);
+ // This write should not log anything
+ logger.Log