Расширение ядра .Net SeriLog не работает - PullRequest
0 голосов
/ 24 декабря 2018

Я использую .net Core 2.0.9 и Serilog.Filters.Expressions 2.0.0.Я настроил свой appsettings.json для записи в таблицу журнала в базе данных. Данные успешно записываются в базу данных, но свойство RequestPath всегда равно null:

"Serilog": {
        "MinimumLevel": {
            "Default": "Debug",
            "Override": {
                "Microsoft": "Debug"
            }
        },
        "WriteTo": [
            {
                "Name": "MSSqlServer",
                "Args": {
                    "connectionString": "myconnectionString",
                    "tableName": "Log"
                }
            }
        ],
        "WriteTo:Async": {
            "Name": "Async",
            "Args": {
                "configure": [
                    {
                        "Name": "File",
                        "Args": {
                            "path": "..\\output\\log.txt",
                            "rollingInterval": "Day"
                        }
                    }
                ]
            }
        },
        "Using": [ "Serilog.Settings.Configuration" ]
        "Filter": [
            {
                "Name": "ByIncludingOnly",
                "Args": {
                    "expression": "RequestPath like '%/api/book%'"
                }
            }
        ]
    },

Но я хочу отфильтровать и сохранить только журналзаписи, которые имеют определенный путь API.В этом случае просто записи, которые содержат путь api / user в RequestPath.Но данные больше не сохраняются, и у меня нет ошибок в журнале, есть идеи, почему?

1 Ответ

0 голосов
/ 25 декабря 2018

Вот рабочие шаги для меня, проверьте разницу:

  1. appsettings.json

    "Serilog": {
        "MinimumLevel": "Information",
        "Override": {
        "Microsoft": "Critical"
        },
        "WriteTo": [
        {
            "Name": "MSSqlServer",
            "Args": {
            "connectionString": "Data Source=xx",
            "autoCreateSqlTable ": true,
            "tableName": "Logs",
            "autoCreateSqlTable": true,
            "columnOptionsSection": {
                "removeStandardColumns": [ "Properties" ],
                "customColumns": [
                {
                    "ColumnName": "Release",
                    "DataType": "varchar",
                    "DataLength": 32
                },
                {
                    "ColumnName": "RequestPath",
                    "DataType": "varchar"
                },
                {
                    "ColumnName": "ConnectionId",
                    "DataType": "varchar"
                }
                ]
            }
            }
    
        },
        {
            "Name": "RollingFile",
            "Args": {
            "pathFormat": "Logs/app-{Date}.txt",
            "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message} {UserName} {ActionName}  {NewLine} {Exception}"
            }
        }
        ],
        "Using": [ "Serilog.Settings.Configuration" ],
        "Filter": [
        {
            "Name": "ByIncludingOnly",
            "Args": {
            "expression": "RequestPath like '%/api%'"
            }
        }
        ]
    },
    
  2. Startup.cs

        Log.Logger = new LoggerConfiguration()
                        .ReadFrom.ConfigurationSection(Configuration.GetSection("Serilog"))
                        .CreateLogger();
    

Для проверки ошибки Serilog, добавьте следующий код:

    Log.Logger = new LoggerConfiguration()
                        .ReadFrom.ConfigurationSection(Configuration.GetSection("Serilog"))
                        .CreateLogger();
    Serilog.Debugging.SelfLog.Enable(msg =>
    {
        Debug.Print(msg);
        Debugger.Break();
    });
...