cleaned up logging a little

This commit is contained in:
CWX
2025-04-15 18:37:18 +01:00
parent 3ba0f5f92c
commit b520c34930
5 changed files with 199 additions and 125 deletions
@@ -13,7 +13,7 @@ public class SptWebApplicationLogger<T> : ISptLogger<T>
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)
+22 -23
View File
@@ -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<ILoggerFactory>().CreateLogger("Server");
try
{
var serviceProvider = builder.Services.BuildServiceProvider();
var watermark = serviceProvider.GetService<Watermark>();
// 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<ModValidator>();
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);
}
}
+19 -15
View File
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\Build.props" />
<Import Project="..\Build.props"/>
<PropertyGroup>
<PackageId>SPTarkov.Server</PackageId>
@@ -18,32 +18,36 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Libraries\SPTarkov.Server.Core\SPTarkov.Server.Core.csproj" />
<ProjectReference Include="..\Libraries\SPTarkov.Server.Assets\SPTarkov.Server.Assets.csproj" />
<ProjectReference Include="..\Libraries\SPTarkov.Server.Core\SPTarkov.Server.Core.csproj"/>
<ProjectReference Include="..\Libraries\SPTarkov.Server.Assets\SPTarkov.Server.Assets.csproj"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="HarmonyX" Version="2.14.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.1" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Enrichers.Context" Version="4.6.5" />
<PackageReference Include="Serilog.Enrichers.Thread" Version="4.0.0" />
<PackageReference Include="Serilog.Exceptions" Version="8.4.0" />
<PackageReference Include="Serilog.Expressions" Version="5.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="HarmonyX" Version="2.14.0"/>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.1"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.1"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.1"/>
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.1"/>
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0"/>
<PackageReference Include="Serilog.Enrichers.Context" Version="4.6.5"/>
<PackageReference Include="Serilog.Enrichers.Thread" Version="4.0.0"/>
<PackageReference Include="Serilog.Exceptions" Version="8.4.0"/>
<PackageReference Include="Serilog.Expressions" Version="5.0.0"/>
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0"/>
</ItemGroup>
<ItemGroup>
<Content Include="Assets\**">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Remove="appsettings.json" />
<None Remove="appsettings.json"/>
<None Remove="appsettings.Development.json"/>
<Content Include="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="appsettings.Development.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
@@ -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"
]
}
}
+43 -86
View File
@@ -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"
]
}
}