From 8fd4a3633fc57b2b4b836be3abb10dd0a68977fd Mon Sep 17 00:00:00 2001 From: Ricardo Carneiro <71648276+ricarneiro@users.noreply.github.com> Date: Tue, 27 May 2025 10:46:39 -0300 Subject: [PATCH] fix: seq disponivel eventualmente. --- .../Configuration/SerilogConfiguration.cs | 141 ++++++++++++++++-- YTExtractor/appsettings.Production.json | 30 ++-- 2 files changed, 146 insertions(+), 25 deletions(-) diff --git a/YTExtractor/Logging/Configuration/SerilogConfiguration.cs b/YTExtractor/Logging/Configuration/SerilogConfiguration.cs index 4a99865..0d21f45 100644 --- a/YTExtractor/Logging/Configuration/SerilogConfiguration.cs +++ b/YTExtractor/Logging/Configuration/SerilogConfiguration.cs @@ -7,24 +7,139 @@ namespace YTExtractor.Logging.Configuration { public static class SerilogConfiguration { - public static LoggerConfiguration SetLoggerConfiguration(this WebApplicationBuilder builder, LoggerConfiguration config, IServiceProvider services, IConfiguration configuration) + public static LoggerConfiguration SetLoggerConfiguration( + this WebApplicationBuilder builder, + LoggerConfiguration config, + IServiceProvider services, + IConfiguration configuration) { var workspace = configuration["Serilog:Properties:Workspace"]; - var seqServer = configuration.GetValue("Serilog:WriteTo:2:Args:serverUrl"); ; + var seqServer = configuration.GetValue("Serilog:WriteTo:2:Args:serverUrl"); - config - .ReadFrom.Configuration(configuration) - .ReadFrom.Services(services) - .Enrich.FromLogContext() - .Enrich.WithEnvironmentName() - //.Enrich.WithMachineName() - .Enrich.WithProperty("Application", "SumaTube") - .Enrich.WithProperty("Workspace", workspace) - .WriteTo.Seq(seqServer) - ; + try + { + // Usa a configuração do appsettings.json (mais elegante) + config + .ReadFrom.Configuration(configuration) + .ReadFrom.Services(services) + .Enrich.FromLogContext() + .Enrich.WithEnvironmentName() + //.Enrich.WithMachineName() + .Enrich.WithProperty("Application", "YTExtractor") + .Enrich.WithProperty("Workspace", workspace); - return config; + // Testa a conectividade com o Seq se estiver configurado + if (!string.IsNullOrEmpty(seqServer)) + { + TestSeqConnectivity(seqServer); + } + + Console.WriteLine("✅ Serilog configurado com sucesso a partir do appsettings.json"); + if (!string.IsNullOrEmpty(seqServer)) + { + Console.WriteLine($"✅ Seq configurado: {seqServer}"); + } + + return config; + } + catch (Exception ex) + { + Console.WriteLine($"❌ ERRO ao configurar Serilog: {ex.Message}"); + Console.WriteLine("🔄 Tentando configuração de fallback..."); + + // Configuração de fallback se a configuração principal falhar + return CreateFallbackConfiguration(config, workspace, seqServer); + } } + private static LoggerConfiguration CreateFallbackConfiguration( + LoggerConfiguration config, + string workspace, + string seqServer) + { + try + { + config + .MinimumLevel.Information() + .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) + .MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information) + .Enrich.FromLogContext() + .Enrich.WithEnvironmentName() + .Enrich.WithProperty("Application", "YTExtractor") + .Enrich.WithProperty("Workspace", workspace ?? "Unknown") + .WriteTo.Console() + .WriteTo.File("logs/fallback-app-.log", rollingInterval: RollingInterval.Day); + + // Tenta adicionar o Seq apenas se a URL estiver disponível + if (!string.IsNullOrEmpty(seqServer)) + { + try + { + config.WriteTo.Seq(seqServer); + Console.WriteLine($"✅ Seq configurado no fallback: {seqServer}"); + } + catch (Exception seqEx) + { + Console.WriteLine($"⚠️ AVISO: Seq não pôde ser configurado no fallback: {seqEx.Message}"); + Console.WriteLine("📝 Continuando apenas com console e arquivo de log"); + } + } + + Console.WriteLine("✅ Configuração de fallback aplicada com sucesso"); + return config; + } + catch (Exception fallbackEx) + { + Console.WriteLine($"❌ ERRO CRÍTICO: Falha na configuração de fallback: {fallbackEx.Message}"); + throw; // Re-throw porque se o fallback falhar, temos um problema sério + } + } + + private static void TestSeqConnectivity(string seqUrl) + { + try + { + using var httpClient = new HttpClient(); + httpClient.Timeout = TimeSpan.FromSeconds(2); + var response = httpClient.GetAsync($"{seqUrl}/api").Result; + + if (response.IsSuccessStatusCode) + { + Console.WriteLine($"🌐 Conectividade com Seq OK: {seqUrl}"); + } + else + { + Console.WriteLine($"⚠️ Seq configurado mas pode não estar respondendo: {response.StatusCode}"); + } + } + catch (Exception ex) + { + Console.WriteLine($"⚠️ Seq configurado mas conexão falhou: {ex.Message}"); + Console.WriteLine($"💡 Dica: Verifique se o Seq está rodando em {seqUrl}"); + } + } } + + //public static class SerilogConfiguration + //{ + // public static LoggerConfiguration SetLoggerConfiguration(this WebApplicationBuilder builder, LoggerConfiguration config, IServiceProvider services, IConfiguration configuration) + // { + // var workspace = configuration["Serilog:Properties:Workspace"]; + // var seqServer = configuration.GetValue("Serilog:WriteTo:2:Args:serverUrl"); ; + + // config + // .ReadFrom.Configuration(configuration) + // .ReadFrom.Services(services) + // .Enrich.FromLogContext() + // .Enrich.WithEnvironmentName() + // //.Enrich.WithMachineName() + // .Enrich.WithProperty("Application", "SumaTube") + // .Enrich.WithProperty("Workspace", workspace) + // .WriteTo.Seq(seqServer) + // ; + + // return config; + // } + + //} } diff --git a/YTExtractor/appsettings.Production.json b/YTExtractor/appsettings.Production.json index 2f2db01..30af48f 100644 --- a/YTExtractor/appsettings.Production.json +++ b/YTExtractor/appsettings.Production.json @@ -1,20 +1,26 @@ { "Serilog": { - "MinimumLevel": { - "Default": "Information", - "Override": { - "Microsoft": "Warning", - "System": "Warning" + "WriteTo": [ + { "Name": "Console" }, + { + "Name": "File", + "Args": { + "path": "logs/prod-app-.log", + "rollingInterval": "Day" + } + }, + { + "Name": "Seq", + "Args": { + "serverUrl": "http://localhost:5341", + "compact": true, + "batchPostingLimit": 100 + } } - }, - "Enrich": [ - "FromLogContext", - "WithMachineName", - "WithThreadId", - "WithEnvironmentUserName" ], "Properties": { - "Workspace": "Production", + "Environment": "Production", + "Workspace": "VPS", "Application": "YTExtractor" } }, -- 2.45.2