Конфигурация динамического ведения журнала Steeltoe с помощью Serilog(или любой структурированной библиотеки ведения журнала)

Вероятно, это повторение того, как настроить Steeltoe Dynamic Logging на сторонние регистраторы как Serilog?, Я хотел бы использовать конфигурацию динамического ведения журнала Steeltoe (Поможет мне динамически настраивать уровни ведения журнала без повторного развертывания) и хотел бы сделать свои операторы ведения журнала более структурированными. Поэтому я решил взглянуть на Serilog. Вот мой код

public class Program
    {

        /// <summary>
        /// Application entry point.
        /// </summary>
        /// <param name="args">arguments.</param>
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public static IWebHost BuildWebHost(string[] args) =>
                    WebHost.CreateDefaultBuilder(args)
                        .UseStartup<Startup>()
            .ConfigureAppConfiguration((hostContext, config) =>
            {
                config.AddCloudFoundry();
            })
            .ConfigureLogging((context, builder) =>
            {
                // We need to clear providers which are added by CreateDefaultBuilder(). 
                // Please refer https://github.com/aspnet/Logging/issues/648. Otherwise log entries will be duplicated 
                // since AddDynamicConsole again add console logger
                builder.ClearProviders();
                if (context.HostingEnvironment.IsDevelopment())
                {
                    builder.AddDebug();
                }
                builder.AddDynamicConsole();
            })
            .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                 .ReadFrom.Configuration(hostingContext.Configuration)
                 .Enrich.FromLogContext()
                 .WriteTo.Console(outputTemplate:
                 "[{Level:u3}] [{Properties}] {Message}{NewLine}{Exception}")
            .WriteTo.Trace())
            .Build();
    } 

Но это не работает, как ожидалось. В диспетчере приложений PCF я не вижу ни одного поставщика журналов, кроме "По умолчанию". Если я раскомментирую

UseSerilog()

они тоже вернулись. Кстати, я не хочу ограничивать себя Serilog, и возможно ли это с NLog(слышал, что он также поддерживает структурированное ведение журнала)? Или любые другие идеи объединить структурированное ведение журнала и конфигурацию динамического ведения журнала приветствуются

0 ответов

Steeltoe теперь имеет предварительную поддержку Serilog через Steeltoe.Extensions.Logging.SerilogDynamicLogger, доступно в ветке dev MyGet feed. Исходный код и модульные тесты находятся в этом репозитории, мы будем рады вашим отзывам!

С новым пакетом NuGet вы сможете сделать это

new WebHostBuilder()
  .ConfigureLogging((builderContext, loggingBuilder) =>
  {
    loggingBuilder.AddConfiguration(builderContext.Configuration.GetSection("Logging"));

    // Add Steeltoe Dynamic Serilog provider
    loggingBuilder.AddSerilogDynamicConsole();
  })

И тогда вы будете на том же пути, что и с уже существующим динамическим регистратором.

Другие вопросы по тегам