From b520c349301c2574d1bcccb6d02e281882baee7f Mon Sep 17 00:00:00 2001 From: CWX Date: Tue, 15 Apr 2025 18:37:18 +0100 Subject: [PATCH] cleaned up logging a little --- .../Logger/WebApplicationLogger.cs | 2 +- SPTarkov.Server/Program.cs | 45 +++--- SPTarkov.Server/SPTarkov.Server.csproj | 34 +++-- SPTarkov.Server/appsettings.Development.json | 114 ++++++++++++++++ SPTarkov.Server/appsettings.json | 129 ++++++------------ 5 files changed, 199 insertions(+), 125 deletions(-) create mode 100644 SPTarkov.Server/appsettings.Development.json diff --git a/SPTarkov.Server/Logger/WebApplicationLogger.cs b/SPTarkov.Server/Logger/WebApplicationLogger.cs index 76c3ff1f..2ec7aff2 100644 --- a/SPTarkov.Server/Logger/WebApplicationLogger.cs +++ b/SPTarkov.Server/Logger/WebApplicationLogger.cs @@ -13,7 +13,7 @@ public class SptWebApplicationLogger : ISptLogger private readonly ILogger _logger; private static ILogger? _fileLogger; - public SptWebApplicationLogger(ILoggerProvider provider) + public SptWebApplicationLogger(ILoggerFactory provider) { _logger = provider.CreateLogger(typeof(T).FullName ?? "SPT Logger Default Name"); if (_fileLogger == null) diff --git a/SPTarkov.Server/Program.cs b/SPTarkov.Server/Program.cs index cca906fb..50ba4e28 100644 --- a/SPTarkov.Server/Program.cs +++ b/SPTarkov.Server/Program.cs @@ -24,7 +24,7 @@ public static class Program // Search for mod dlls var mods = ModDllLoader.LoadAllMods(); // Create web builder and logger - var builder = CreateNewHostBuilder(out var registeredLogger, args); + var builder = CreateNewHostBuilder(args); // Initialize the program variables TODO: this needs to be implemented properly ProgramStatics.Initialize(); @@ -37,10 +37,10 @@ public static class Program DependencyInjectionRegistrator.RegisterSptComponents(typeof(Program).Assembly, typeof(App).Assembly, builder.Services); // register mod components from the filtered list DependencyInjectionRegistrator.RegisterModOverrideComponents(builder.Services, sortedLoadedMods.SelectMany(a => a.Assemblies).ToList()); - var logger = new SerilogLoggerProvider(registeredLogger).CreateLogger("Server"); + var serviceProvider = builder.Services.BuildServiceProvider(); + var logger = serviceProvider.GetService().CreateLogger("Server"); try { - var serviceProvider = builder.Services.BuildServiceProvider(); var watermark = serviceProvider.GetService(); // Initialize Watermak watermark?.Initialize(); @@ -85,12 +85,27 @@ public static class Program } } - private static WebApplicationBuilder CreateNewHostBuilder(out Serilog.Core.Logger logger, string[]? args = null) + private static WebApplicationBuilder CreateNewHostBuilder(string[]? args = null) { var builder = WebApplication.CreateBuilder(args); - builder.Host.UseSerilog(); + builder.Logging.ClearProviders(); +#if DEBUG + builder.Configuration.AddJsonFile("appsettings.Development.json", true, true); +#else builder.Configuration.AddJsonFile("appsettings.json", true, true); - CreateAndRegisterLogger(builder, out logger); +#endif + + builder.Host.UseSerilog((context, provider, logger) => + { + logger + .ReadFrom.Configuration(context.Configuration) + .ReadFrom.Services(provider) + .Enrich.FromLogContext() + .Enrich.WithExceptionDetails() + .Enrich.WithThreadName() + .Enrich.WithThreadId(); + }); + return builder; } @@ -98,7 +113,7 @@ public static class Program { // We need the SPT dependencies for the ModValidator, but mods are loaded before the web application // So we create a disposable web application that we will throw away after getting the mods to load - var builder = CreateNewHostBuilder(out _); + var builder = CreateNewHostBuilder(); // register SPT components DependencyInjectionRegistrator.RegisterSptComponents(typeof(Program).Assembly, typeof(App).Assembly, builder.Services); // register the mod validator components @@ -111,20 +126,4 @@ public static class Program var modValidator = provider.GetRequiredService(); return modValidator.ValidateAndSort(mods); } - - public static void CreateAndRegisterLogger(WebApplicationBuilder builder, out Serilog.Core.Logger logger) - { - builder.Logging.ClearProviders(); - logger = new LoggerConfiguration() - .ReadFrom.Configuration(builder.Configuration) -# if DEBUG - .MinimumLevel.Debug() -# endif - .MinimumLevel.Override("Microsoft.AspNetCore.Hosting.Diagnostics", LogEventLevel.Warning) - .Enrich.FromLogContext() - .Enrich.WithThreadId() - .Enrich.WithExceptionDetails() - .CreateLogger(); - builder.Logging.AddSerilog(logger); - } } diff --git a/SPTarkov.Server/SPTarkov.Server.csproj b/SPTarkov.Server/SPTarkov.Server.csproj index 7baf810b..d4fa1640 100644 --- a/SPTarkov.Server/SPTarkov.Server.csproj +++ b/SPTarkov.Server/SPTarkov.Server.csproj @@ -1,6 +1,6 @@ - + SPTarkov.Server @@ -18,32 +18,36 @@ - - + + - - - - - - - - - - - + + + + + + + + + + + Always - + + Always + + Always + diff --git a/SPTarkov.Server/appsettings.Development.json b/SPTarkov.Server/appsettings.Development.json new file mode 100644 index 00000000..d54831b7 --- /dev/null +++ b/SPTarkov.Server/appsettings.Development.json @@ -0,0 +1,114 @@ +{ + "Serilog": { + "Using": [ + "Serilog.Sinks.Console", + "Serilog.Sinks.File" + ], + "MinimumLevel": { + "Default": "Verbose", + "Override": { + "Microsoft": "Verbose" + } + }, + "WriteTo": [ + { + "Name": "Logger", + "Args": { + "configureLogger": { + "Filter": [ + { + "Name": "ByExcluding", + "Args": { + "expression": "StartsWith(SourceContext, 'SPTarkov.Server.Core.Servers.Http.RequestLogger')" + } + }, + { + "Name": "ByExcluding", + "Args": { + "expression": "SourceContext like 'Microsoft%'" + } + } + ], + "WriteTo": [ + { + "Name": "Console", + "Args": { + "formatter": "SPTarkov.Server.Logger.ConsoleFormatter::Default, SPTarkov.Server" + } + }, + { + "Name": "File", + "Args": { + "path": "./user/logs/spt/spt.txt", + "rollingInterval": "Day", + "fileSizeLimitBytes": "20971520", + "rollOnFileSizeLimit": true, + "formatter": "SPTarkov.Server.Logger.FileFormatter::Default, SPTarkov.Server" + } + } + ] + } + } + }, + { + "Name": "Logger", + "Args": { + "configureLogger": { + "Filter": [ + { + "Name": "ByIncludingOnly", + "Args": { + "expression": "StartsWith(SourceContext, 'SPTarkov.Server.Core.Servers.Http.RequestLogger')" + } + } + ], + "WriteTo": [ + { + "Name": "File", + "Args": { + "formatter": "SPTarkov.Server.Logger.FileFormatter::Default, SPTarkov.Server", + "path": "./user/logs/requests/requests.txt", + "rollingInterval": "Day", + "fileSizeLimitBytes": "20971520", + "rollOnFileSizeLimit": true + } + } + ] + } + } + }, + { + "Name": "Logger", + "Args": { + "configureLogger": { + "Filter": [ + { + "Name": "ByIncludingOnly", + "Args": { + "expression": "SourceContext like 'Microsoft%'" + } + } + ], + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "./user/logs/kestrel/kestrel.txt", + "rollingInterval": "Day", + "fileSizeLimitBytes": "20971520", + "rollOnFileSizeLimit": true, + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" + } + } + ] + } + } + } + ], + "Enrich": [ + "FromLogContext", + "WithExceptionDetails", + "WithThreadId" + ] + } +} diff --git a/SPTarkov.Server/appsettings.json b/SPTarkov.Server/appsettings.json index c5153967..fad010ad 100644 --- a/SPTarkov.Server/appsettings.json +++ b/SPTarkov.Server/appsettings.json @@ -1,103 +1,60 @@ { - "Logging": { - "LogLevel": { - "Default": "Trace", - "System": "Information", - "Microsoft": "Information", - "Microsoft.AspNetCore.Hosting.Diagnostics": "Warning", - "Microsoft.AspNetCore.Server.Kestrel.Connections": "Information" - } - }, "Serilog": { + "Using": [ + "Serilog.Sinks.Console", + "Serilog.Sinks.File" + ], + "MinimumLevel": { + "Default": "Verbose", + "Override": { + "Microsoft": "Verbose" + } + }, "WriteTo": [ { - "Name": "Async", + "Name": "Logger", "Args": { - "configure": [ - { - "Name": "Logger", - "Args": { - "configureLogger": { - "Filter": [ - { - "Name": "ByExcluding", - "Args": { - "expression": "StartsWith(SourceContext, 'SPTarkov.Server.Core.Servers.Http.RequestLogger')" - } - } - ], - "WriteTo": [ - { - "Name": "Logger", - "Args": { - "configureLogger": { - "Filter": [ - { - "Name": "ByExcluding", - "Args": { - "expression": "StartsWith(SourceContext, 'SPTarkov.Server.Core.Utils.Logger.FileLogger')" - } - } - ], - "WriteTo": [ - { - "Name": "Console", - "Args": { - "formatter": "SPTarkov.Server.Logger.ConsoleFormatter::Default, SPTarkov.Server" - } - } - ] - } - } - }, - { - "Name": "File", - "Args": { - "formatter": "SPTarkov.Server.Logger.FileFormatter::Default, SPTarkov.Server", - "path": "./user/logs/log.txt", - "fileSizeLimitBytes": "20971520", - "rollOnFileSizeLimit": true, - "rollingInterval": "Day" - } - } - ] + "configureLogger": { + "Filter": [ + { + "Name": "ByExcluding", + "Args": { + "expression": "StartsWith(SourceContext, 'SPTarkov.Server.Core.Servers.Http.RequestLogger')" + } + }, + { + "Name": "ByExcluding", + "Args": { + "expression": "SourceContext like 'Microsoft%'" } } - }, - { - "Name": "Logger", - "Args": { - "configureLogger": { - "Filter": [ - { - "Name": "ByIncludingOnly", - "Args": { - "expression": "StartsWith(SourceContext, 'SPTarkov.Server.Core.Servers.Http.RequestLogger')" - } - } - ], - "WriteTo": [ - { - "Name": "File", - "Args": { - "formatter": "SPTarkov.Server.Logger.FileFormatter::Default, SPTarkov.Server", - "path": "./user/logs/requests.txt", - "fileSizeLimitBytes": "20971520", - "rollOnFileSizeLimit": true, - "rollingInterval": "Day" - } - } - ] + ], + "WriteTo": [ + { + "Name": "Console", + "Args": { + "formatter": "SPTarkov.Server.Logger.ConsoleFormatter::Default, SPTarkov.Server" + } + }, + { + "Name": "File", + "Args": { + "path": "./user/logs/spt/spt.txt", + "rollingInterval": "Day", + "fileSizeLimitBytes": "20971520", + "rollOnFileSizeLimit": true, + "formatter": "SPTarkov.Server.Logger.FileFormatter::Default, SPTarkov.Server" } } - } - ] + ] + } } } ], "Enrich": [ "FromLogContext", - "WithExceptionDetails" + "WithExceptionDetails", + "WithThreadId" ] } }