LANCommander/LANCommander.Server/Startup/Logger.cs

93 lines
3.8 KiB
C#
Raw Permalink Normal View History

2025-03-11 21:21:16 -05:00
using Elastic.Serilog.Sinks;
using LANCommander.Server.Configuration;
2025-03-11 21:21:16 -05:00
using LANCommander.Server.Hubs;
using LANCommander.Server.Parsers;
2025-03-11 21:21:16 -05:00
using LANCommander.Server.Services.Models;
using LANCommander.Server.Settings.Enums;
using Microsoft.Extensions.Options;
2025-03-11 21:21:16 -05:00
using Serilog;
using Serilog.Events;
using Serilog.Filters;
using Serilog.Sinks.AspNetCore.App.SignalR.Extensions;
namespace LANCommander.Server.Startup;
public static class Logger
{
public static WebApplicationBuilder AddLogger(this WebApplicationBuilder builder)
{
Log.Logger = new LoggerConfiguration()
2025-11-13 23:40:22 -06:00
.MinimumLevel.Verbose()
.WriteTo.Console()
.CreateBootstrapLogger();
2025-03-11 21:21:16 -05:00
builder.Services.AddSerilogHub<LoggingHub>();
builder.Services.AddSerilog((serviceProvider, config) =>
{
2025-11-13 23:40:22 -06:00
config.MinimumLevel.Verbose();
config.Enrich.FromLogContext();
var settings = serviceProvider.GetRequiredService<IOptions<Settings.Settings>>();
2025-03-11 21:21:16 -05:00
if (settings.Value.Server.Logs.IgnorePings)
2025-03-11 21:21:16 -05:00
config.Filter.ByExcluding(Matching.WithProperty<string>("RequestPath", v => v.StartsWith("/api/Ping", StringComparison.OrdinalIgnoreCase)));
foreach (var provider in settings.Value.Server.Logs.Providers)
2025-03-11 21:21:16 -05:00
{
LogEventLevel minimumLevel = provider.MinimumLevel switch
{
2025-11-13 23:40:22 -06:00
LogLevel.Trace => LogEventLevel.Verbose,
2025-03-11 21:21:16 -05:00
LogLevel.Debug => LogEventLevel.Debug,
LogLevel.Warning => LogEventLevel.Warning,
LogLevel.Information => LogEventLevel.Information,
LogLevel.Error => LogEventLevel.Error,
LogLevel.Critical => LogEventLevel.Fatal,
_ => LogEventLevel.Information
};
switch (provider.Type)
{
case LoggingProviderType.Console:
config.WriteTo.Console(restrictedToMinimumLevel: minimumLevel);
break;
case LoggingProviderType.SignalR:
config.WriteTo.SignalR<LoggingHub>(
serviceProvider,
(context, message, logEvent) => LoggingHub.Log(context, message, logEvent));
break;
case LoggingProviderType.File:
config.WriteTo.File(
Path.Combine(provider.ConnectionString,"log-.txt"),
rollingInterval: (RollingInterval)(int)(provider.ArchiveEvery ?? LogInterval.Day),
restrictedToMinimumLevel: minimumLevel);
break;
case LoggingProviderType.Seq:
try
{
var options = ConnectionStringBinder.Bind<SeqOptions>(provider.ConnectionString);
config.WriteTo.Seq(
2025-11-11 02:11:06 -06:00
restrictedToMinimumLevel: minimumLevel,
serverUrl: options.ServerUrl,
apiKey: options.ApiKey);
}
catch (Exception ex)
{
Log.Error(ex, "Could not bind Seq connection string");
}
2025-03-11 21:21:16 -05:00
break;
case LoggingProviderType.ElasticSearch:
config.WriteTo.Elasticsearch([new Uri(provider.ConnectionString)], restrictedToMinimumLevel: minimumLevel);
break;
}
}
});
return builder;
}
}