@NewDevLab

Фильтры в serilog?

Log.Logger = new LoggerConfiguration()
				.MinimumLevel.Override("Microsoft", LogEventLevel.Debug)
				.Enrich.FromLogContext()
				.Filter.ByIncludingOnly("@Level is null")
				.WriteTo.Console()
				.CreateLogger();

Почему level всегда null? т.е. выводятся все логи в консоль. "@Level = 'Information'" ничего не выводит.
Минимальный пример, чистый проект из шаблона VS с подключенными Serilog.aspnetcore и Serilog.Expressions , конфиг вот с кода задаётся.

UPD:
.Filter.ByIncludingOnly(a => a.Level == LogEventLevel.Information)

так работает. тогда вопрос, а это задать декларативно в конфиге? документация явно уже не та...

UPD2:
т.е. все вот работают в продакт и не задаются вопросом структурированных логов. прикольно.
  • Вопрос задан
  • 659 просмотров
Решения вопроса 1
@NewDevLab Автор вопроса
Подключил Serilog.Expressions, а доки читал от Serilog.Filter.Expressions.
растяпа
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@den_labs
Вы просите, чтобы за вас разобрались в текущем коде. А лучше описать задачу, которую вы пытаетесь решить.
Я тоже не оч понял из вопроса, что вы хотите.

Нашёл у себя в загашнике такой код, может вам поможет, в конфиге ничего нет, всё через код:

Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.File("info.txt", LogEventLevel.Information)
                //.WriteTo.File("debug.txt", LogEventLevel.Debug)
                .WriteTo.Console(LogEventLevel.Information, theme: SystemConsoleTheme.Colored)
                .CreateLogger();


        private static void ConfigureServices(IServiceCollection services, IExternalServerSettings serverSettings)
        {
            ......
            services.AddLogging(lb =>
            {
                lb.SetMinimumLevel(LogLevel.Debug);
                lb.AddFilter((type, level) => !type.Contains("System"));
            });
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы