LANCommander/LANCommander.Server/Startup/Logger.cs

64 lines
2.5 KiB
C#
Raw Permalink Normal View History

2025-12-11 15:26:27 +11:00
using LANCommander.Server.Logging;
using LANCommander.Server.Settings.Enums;
using Microsoft.Extensions.Options;
2025-03-11 21:21:16 -05:00
namespace LANCommander.Server.Startup;
public static class Logger
{
public static WebApplicationBuilder AddLogger(this WebApplicationBuilder builder)
{
builder.Logging.ClearProviders();
2025-12-11 15:26:27 +11:00
builder.Services.AddLogging((loggingBuilder) =>
2025-03-11 21:21:16 -05:00
{
2025-12-11 15:26:27 +11:00
var serviceProvider = builder.Services.BuildServiceProvider();
var settings = serviceProvider.GetRequiredService<IOptions<Settings.Settings>>();
2025-12-11 15:26:27 +11:00
// Configure filters
if (settings.Value.Server.Logs.IgnorePings)
2025-12-11 15:26:27 +11:00
{
loggingBuilder.AddFilter((category, level) =>
{
// Filter out ping-related logs if IgnorePings is enabled
if (category != null && category.Contains("Ping", StringComparison.OrdinalIgnoreCase))
return false;
return true;
});
}
2025-03-11 21:21:16 -05:00
foreach (var provider in settings.Value.Server.Logs.Providers)
2025-03-11 21:21:16 -05:00
{
2025-12-11 15:26:27 +11:00
var minimumLevel = provider.MinimumLevel;
2025-03-11 21:21:16 -05:00
switch (provider.Type)
{
case LoggingProviderType.Console:
2025-12-11 15:26:27 +11:00
loggingBuilder.AddConsole();
loggingBuilder.SetMinimumLevel(minimumLevel);
2025-03-11 21:21:16 -05:00
break;
2025-12-11 15:26:27 +11:00
2025-03-11 21:21:16 -05:00
case LoggingProviderType.SignalR:
2025-12-11 15:26:27 +11:00
loggingBuilder.Services.AddSingleton<ILoggerProvider>(sp =>
new SignalRLoggerProvider(sp, minimumLevel));
2025-03-11 21:21:16 -05:00
break;
2025-12-11 15:26:27 +11:00
2025-03-11 21:21:16 -05:00
case LoggingProviderType.File:
// Use ServiceDefaults file logging
loggingBuilder.AddFileLogging(provider.ConnectionString, minimumLevel);
2025-03-11 21:21:16 -05:00
break;
2025-12-11 15:26:27 +11:00
2025-03-11 21:21:16 -05:00
case LoggingProviderType.Seq:
case LoggingProviderType.ElasticSearch:
2025-12-11 15:26:27 +11:00
// Note: Standard .NET logging doesn't have built-in support for Seq or Elasticsearch
// Users will need to add these providers manually if needed
builder.Logging.AddDebug();
Console.WriteLine($"Warning: {provider.Type} logging provider is not supported in standard .NET logging. Consider using a third-party logging library.");
2025-03-11 21:21:16 -05:00
break;
}
}
});
return builder;
}
}