Serilog Как обеспечить отсутствие дубликатов приемников, фильтров или аналогичных записей в конфигурации?

#c# #.net #serilog

Вопрос:

Я хотел бы настроить Serilog в программном коде с предопределенными значениями, потому что у нас часто одинаковые требования к ведению журнала. Чтобы можно было изменить значения по умолчанию, я хочу настроить Serilog с переменными среды и параметрами командной строки с помощью IConfigurationBuilder .

Моя проблема в том, что я не могу ничего удалить из объекта конфигурации. Это означает, что если кто-то добавит приемник, который уже настроен по умолчанию, он будет существовать дважды.

Могу ли я как-то предотвратить это? У вас есть какие-либо идеи для меня, как предотвратить дублирование записей в результирующей конфигурации?

Вот несколько примеров кода, возможно, для уточнения:

 using Serilog; using Serilog.Events; using System; using Microsoft.Extensions.Configuration; using Serilog.Exceptions;  namespace example.Logging;  public static class LoggingConfigurator {  public static LoggerConfiguration CreateLoggerConfiguration(  IConfiguration configuration,  bool useStandardConfig = true,  Funclt;LoggerConfiguration, LoggerConfigurationgt; configure = null)  {  var loggerConfiguration = new LoggerConfiguration();   if (useStandardConfig)  {  // standard configuration  loggerConfiguration.MinimumLevel.Override("microsoft", LogEventLevel.Warning);  loggerConfiguration.Enrich.FromLogContext();  loggerConfiguration.Enrich.WithExceptionDetails();   loggerConfiguration.WriteTo.Async(  a =gt;  {  a.Debug();  a.Console();  }  );  }   if (configure is not null)  {  loggerConfiguration = configure(loggerConfiguration);  }   loggerConfiguration.ReadFrom.Configuration(configuration);   return loggerConfiguration;  } }  

Комментарии:

1. Я не знаю, Serilog имеет ли это какое-либо отношение к вам, но вы можете проверить IConfiguration это, прочитав его и убедившись, что нет дубликатов, прежде чем передать его Serilog . Вы можете сделать это, выполнив итерацию дочерних элементов конфигурации с помощью .GetChildren()

2. @Киран Девлин да, спасибо вам за то, что я смог убедиться, что никакие двойные значения не исходят из файлов или около того. но это НЕ решает проблему, из-за которой я не могу гарантировать, что в объекте конфигурации нет двойных значений из Serilog (конфигурация регистратора)