#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 (конфигурация регистратора)