Fix Worker Serilog

This commit is contained in:
2025-09-06 22:13:09 -03:00
parent 475b886d9a
commit a49fc80fd9
7 changed files with 20 additions and 22 deletions

View File

@@ -11,18 +11,13 @@ using Polly;
using Polly.Extensions.Http;
using System.Threading.RateLimiting;
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateBootstrapLogger();
Log.Information("Iniciando Elecciones.Worker Host...");
var builder = Host.CreateApplicationBuilder(args);
// 1. Registra el servicio del interruptor como siempre.
// 1. Registra el servicio del interruptor.
builder.Services.AddSingleton<LoggingSwitchService>();
// 2. Configura Serilog usando AddSerilog.
// 2. Configura Serilog usando UseSerilog en el HostBuilder.
// (Nota: AddSerilog también funciona, pero UseSerilog es más consistente con la API)
builder.Services.AddSerilog((services, configuration) => {
var loggingSwitch = services.GetRequiredService<LoggingSwitchService>();
configuration
@@ -112,9 +107,8 @@ builder.Services.AddHostedService<LowPriorityDataWorker>();
var host = builder.Build();
// --- LÓGICA PARA LEER EL NIVEL DE LOGGING AL INICIO ---
// Creamos un scope temporal para leer la configuración de la BD
using (var scope = builder.Services.BuildServiceProvider().CreateScope())
// La lógica para leer el nivel de logging se ejecuta DESPUÉS de construir el host.
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
@@ -122,31 +116,35 @@ using (var scope = builder.Services.BuildServiceProvider().CreateScope())
var dbContext = services.GetRequiredService<EleccionesDbContext>();
var loggingSwitchService = services.GetRequiredService<LoggingSwitchService>();
// Buscamos el nivel de logging guardado en la BD
var logLevelConfig = await dbContext.Configuraciones
.AsNoTracking()
.FirstOrDefaultAsync(c => c.Clave == "Logging_Level");
if (logLevelConfig != null)
{
// Si lo encontramos, lo aplicamos al interruptor
loggingSwitchService.SetLoggingLevel(logLevelConfig.Valor);
Console.WriteLine($"--> Nivel de logging inicial establecido desde la BD a: {logLevelConfig.Valor}");
// Obtenemos un logger de la forma correcta para registrar este evento
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Nivel de logging inicial establecido desde la BD a: {Level}", logLevelConfig.Valor);
}
}
catch (Exception ex)
{
// Si hay un error (ej. la BD no está disponible al arrancar), se usará el nivel por defecto 'Information'.
Console.WriteLine($"--> No se pudo establecer el nivel de logging desde la BD: {ex.Message}");
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "No se pudo establecer el nivel de logging desde la BD. Usando el nivel por defecto.");
}
}
try
{
// Usamos el logger del host para el mensaje de inicio
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Iniciando Elecciones.Worker Host...");
host.Run();
}
catch (Exception ex)
{
// En caso de un error fatal, el logger estático (si está configurado) puede ser un respaldo
Log.Fatal(ex, "El Host de Elecciones.Worker terminó inesperadamente");
}
finally