我正在使用.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/用户路径的条目。但是不再保存任何数据,我没有日志错误,知道为什么吗?
以下是我的工作步骤,请检查差异:
-
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%'" } } ] },
-
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();
});