The Problem
I found configuring Serilog for .Net Core quite complex and poorly documented. All I wanted to do was to pipe log messages to a text file.
The Solution
After some searching I found this project.
The following code was added to Program.cs
public static void Main(string[] args) { CreateHostBuilderWithSimpleSerilog(args).Build().Run(); } public static IHostBuilder CreateHostBuilderWithSimpleSerilog(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging((context, builder) => { //---------------------------------------------------------------------- // Simple SeriLog | // Using https://github.com/serilog/serilog-extensions-logging-file | //---------------------------------------------------------------------- builder.AddFile(context.Configuration.GetLoggerConfiguration()); }) .ConfigureWebHostDefaults(webBuilder => { if (bool.Parse(Environment.GetEnvironmentVariable("USE_HTTP_SYS") ?? "false")) { webBuilder.UseHttpSys(options => { options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.AllowAnonymous = true; }); } webBuilder.UseStartup<Startup>(); });
Along with
public static class StartupConfiguration { public static IConfigurationSection GetLoggerConfiguration(this IConfiguration config) { return config.GetSection("Logging"); } public static T Get<T>(this IConfiguration config, string name) { return config .GetSection(name) .Get<T>(); } }
And then the Appsettings.json section for logging
"Logging": { "OutputTemplate": "{Timestamp:o} {RequestId,13} [{Level:u3}] {Message} Properties: {Properties:j} ({EventId:x8}){NewLine}{Exception}", "PathFormat": "Logs/MyLog-{Date}.log", "MinimumLevel": "Information", "LogLevel": { "Default": "Warning", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Warning", "Microsoft.EntityFrameworkCore": "Warning" } }
And Voila. Logging to file works and Dependency Injection of Serilog is wired up too.