我正在尝试在我的应用程序设置中使用 serilog 表达式实现日志过滤器,过滤所有“健康”相关日志。 这是我到目前为止的配置:
"Serilog": {
"Using": [ "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Data Source=XXX; Database=YYY; Integrated Security=True; TrustServerCertificate=true;",
"sinkOptionsSection": {
"tableName": "Logging",
"autoCreateSqlDatabase": false,
"autoCreateSqlTable": true
},
"columnOptionsSection": {
"additionalColumns": [
{
"columnName": "RequestMethod",
"dataLength": "8"
},
{
"columnName": "StatusCode",
"dataType": "Int"
}
]
},
"Filter": [
{
"Name": "ByExcluding",
"Args": {
"expression": "RequestPath like '%/health%'"
}
}
]
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Destructure": [
{
"Name": "ToMaximumDepth",
"Args": { "maximumDestructuringDepth": 4 }
},
{
"Name": "ToMaximumStringLength",
"Args": { "maximumStringLength": 100 }
},
{
"Name": "ToMaximumCollectionCount",
"Args": { "maximumCollectionCount": 10 }
}
],
"Properties": {
"Application": "Api"
}
},
但是,与 HealthChecks 相关的消息继续记录在我的数据库中。
如何编写一个配置,通过仅包含、排除进行过滤或检查 Loggin 表中的列是否具有特定值?
谢谢
我阅读了关于 Serilog 表达式的 文档 ,但不太了解过滤器的工作原理:我可以使用哪些属性来过滤?我在哪里可以找到它们?它们是 MessageTemplate 列中的 {KEYS} 中的变量吗?我的自定义列怎么样:我可以过滤它们吗?
例如:MessageTemplate 'HTTP {RequestMethod} {RequestPath} 在 {Elapsed:0.0000} ms 中响应 {StatusCode} 中的消息为我提供了 {RequestPath} 变量,但是当我尝试在过滤器中使用它时(“表达式”: “RequestPath like '%/health%'”),没有任何反应。
Filter 部分位于 WriteTo 标记内的错误位置。 将其放在“Serilog”内部解决了问题。
"Serilog": {
"Using": [ "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Data Source=XXX; Database=YYY; Integrated Security=True; TrustServerCertificate=true;",
"sinkOptionsSection": {
"tableName": "Logging",
"autoCreateSqlDatabase": false,
"autoCreateSqlTable": true
},
"columnOptionsSection": {
"additionalColumns": [
{
"columnName": "RequestMethod",
"dataType": "nvarchar",
"dataLength": "8"
},
{
"columnName": "StatusCode",
"dataType": "Int"
},
{
"columnName": "MachineName",
"dataType": "nvarchar",
"dataLength": "32"
},
{
"columnName": "EnvironmentName",
"dataType": "nvarchar",
"dataLenght": "32"
},
{
"columnName": "EnvironmentUserName",
"dataType": "nvarchar",
"dataLenght": "32"
},
{
"columnName": "ClientIp",
"dataType": "nvarchar",
"dataLenght": "64"
},
{
"columnName": "ThreadId",
"dataType": "int"
},
{
"columnName": "ThreadName",
"dataType": "nvarchar",
"dataLenght": "32"
},
{
"columnName": "ProcessId",
"dataType": "int"
},
{
"columnName": "ProcessName",
"dataType": "nvarchar",
"dataLenght": "64"
}
]
}
}
}
],
"Filter": [
{
"Name": "ByExcluding",
"Args": {
"expression": "Contains(@m, 'health')"
}
},
{
"Name": "ByExcluding",
"Args": {
"expression": "Contains(@m, 'Health_Homol')"
}
},
{
"Name": "ByExcluding",
"Args": {
"expression": "Contains(@m, 'swagger')"
}
}
],
"Enrich": [
"FromLogContext",
"WithMachineName",
"WithEnvironmentName",
"WithEnvironmentUserName",
"WithThreadId",
"WithThreadName",
"WithClientIp",
"WithProcessId",
"WithProcessName"
],
"Properties": {
"Application": "Api"
}