Serilog фильтр RequestPath

У меня проблемы с исключением проверки работоспособности из файлов serilog.

  1. Установлен Serilog.Filters.Expressions, и строка StatusCode = 200 будет отфильтрована.

  2. настройки приложения:

    "Serilog": {
         "MinimumLevel": {
           "Default": "Verbose",
           "Override": {
             "Microsoft": "Information",
         "Microsoft.EntityFrameworkCore": "Warning",
         "AspNetCore.HealthChecks.UI": "Warning",
             "HealthChecks": "Warning",
             "System": "Warning"
           }
         },
         "Using": ["Serilog.Filters.Expressions"],
         "Filter": [
           {
             "Name": "ByExcluding",
             "Args": {
               "expression": "EndsWith(RequestPath, '/healthcheck') and StatusCode=200"
             }
           }
         ],
         "WriteTo": [
           {
             "Name": "Async",
             "Args": {
               "configure": [
                 {
                   "Name": "File",
                   "Args": {
                     "path": "C:/Logs/MyApi/log.txt",
                     "rollingInterval": "Day",
                     "retainedFileCountLimit": 7,
                     "buffered": true
                   }
                 }
               ]
             }
           }
         ]
       }
    

3. программа

 public class Program
    {
        public static int Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateLogger();
            try
            {
                Log.Information("Starting web host");
                CreateWebHostBuilder(args).Build().Run();
                return 0;
            }
            catch (Exception ex)
            { Log.Fatal(ex, "Host terminated unexpectedly");
                return 1;
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>

       WebHost.CreateDefaultBuilder(args)
               .UseStartup<Startup>()
               .UseSerilog((hostingContext, loggerConfiguration) =>
               {
                   loggerConfiguration.Enrich.FromLogContext()
                     .WriteTo.Elasticsearch()
                   .ReadFrom.Configuration(hostingContext.Configuration);
                   Log.Information("App started");
               });

Журналы изменены с

2020-11-04 23: 59: 44.128 +01: 00 [INF] Запрос запуска HTTP / 1.1 GET https://servicesp-rbg.company.com/MyApi/healthcheck 2020-11-04 23: 59: 44.128 +01: 00 [INF] Запрос завершен за 0,211 мс 200 текст / обычный

to

2020-11-06 14: 27: 32.787 +01: 00 [INF] Запрос запуска HTTP / 1.1 GET https://servicesp-rbg.company.com/My.Api/healthcheck

поэтому фильтр statuscode = 200 работает, но не «проверка работоспособности» RequestPath.


person SebastianOS    schedule 06.11.2020    source источник


Ответы (1)


Выражение простого решения: EndsWith (RequestPath, '/ healthcheck') AND StatusCode = 200

Заменено "И" на "ИЛИ"

выражение: EndsWith (RequestPath, '/ healthcheck') ИЛИ StatusCode = 200

person SebastianOS    schedule 12.11.2020