.Net 核心扩展 SeriLog 筛选不起作用



我正在使用.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/用户路径的条目。但是不再保存任何数据,我没有日志错误,知道为什么吗?

以下是我的工作步骤,请检查差异:

  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();
    });

最新更新