2025-12-11 15:26:27 +11:00
using LANCommander.Server.Logging ;
2025-11-16 12:31:25 -06:00
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 )
{
2025-12-11 16:18:11 +11:00
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 ( ) ;
2025-11-16 12:31:25 -06:00
var settings = serviceProvider . GetRequiredService < IOptions < Settings . Settings > > ( ) ;
2025-12-11 15:26:27 +11:00
// Configure filters
2025-11-16 12:31:25 -06:00
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
2025-11-16 12:31:25 -06: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 :
2025-12-11 16:18:11 +11:00
// 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 ;
}
}