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

Это, вероятно, повторение Как настроить, чтобы 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 (слышал, что он также поддерживает структурированное ведение журнала)?Или любые другие идеи объединить структурированное ведение журнала и конфигурацию динамического ведения журнала приветствуются

1 Ответ

0 голосов
/ 06 апреля 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...