Не вся информация отображается в Kibana (Serilog)

#serilog

#serilog

Вопрос:

Когда я запускаю свое приложение AspNetCore V5, я вижу, что ведение журнала отображается в Kibana только до того момента, который я вызываю CreateHostBuilder(args) .

Итак, в Kibana я вижу

Шаг 1

и

Запуск приложения

Но после этого ничего. Даже если я добавлю Log.Information("Requested data"); выполняемый метод контроллера, я его не увижу.

appsettings.json

 {
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Information",
        "System": "Warning"
      }
    }
  },
  "ElasticConfiguration": {
    "Uri": "http://localhost:9200"
  },
  "AllowedHosts": "*"
}
 

Program.cs

 using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Sinks.Elasticsearch;
using System;
using System.Reflection;

namespace BlazorElkSerilogTest.Server
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //configure logging first
            ConfigureLogging();

            Log.Information("Step {step}", 1);
            IHostBuilder hostBuilder = CreateHostBuilder(args);
            Log.Information("Step {step}", 2);
            IHost host = hostBuilder.Build();
            Log.Information("Step {step}", 3);
            host.Run();
        }

        static void ConfigureLogging()
        {
            var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            var configuration = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile(
                    $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
                    optional: true)
                .Build();

            Log.Logger = new LoggerConfiguration()
                .Enrich.FromLogContext()
                .Enrich.WithMachineName()
                .WriteTo.Debug()
                .WriteTo.Console()
                .WriteTo.Elasticsearch(ConfigureElasticSink(configuration, environment))
                .Enrich.WithProperty("Environment", environment)
                .ReadFrom.Configuration(configuration)
                .CreateLogger();
        }

        static ElasticsearchSinkOptions ConfigureElasticSink(IConfigurationRoot configuration, string environment)
        {
            return new ElasticsearchSinkOptions(new Uri(configuration["ElasticConfiguration:Uri"]))
            {
                AutoRegisterTemplate = true,
                IndexFormat = $"{Assembly.GetExecutingAssembly().GetName().Name.ToLower().Replace(".", "-")}-{environment?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}"
            };
        }


        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            try
            {
                Log.Information("Starting app");
                return Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                            {
                                webBuilder.UseStartup<Startup>();
                            })
                    .ConfigureAppConfiguration(configuration =>
                    {
                        configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
                        configuration.AddJsonFile(
                            $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
                            optional: true);
                    })
                    .UseSerilog();
            }
            catch (Exception e)
            {
                Log.Fatal(e, "Application startup failed");
                throw;
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }
    }
}

 

Ответ №1:

Try / catch / finally должен включать код Main , а не CreateHostBuilder — в противном случае регистратор закрывается до запуска приложения!