使用 RestrictedToMinimumLevel 覆盖 Serilog 中的默认最小级别

时间:2021-02-03 00:29:46

标签: serilog

我已将 Serilog 配置为具有 Verbose 的默认 MinimumLevel。 但我想将 SQL Server 的日志记录限制为警告(及以上)。

我的配置(JSON 格式)如下所示:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.MSSqlServer", "My.Framework.AspNet" ],
    "Enrich": [ "FromLogContext", "WithEventType" ],
    "MinimumLevel": {
      "Default": "Verbose"
    },
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "restrictedToMinimumLevel": "Warning",
        "Args": {
          "connectionString": "Server=yada yada yada ;MultipleActiveResultSets=True",
          "tableName": "ErrorLogs",
          "autoCreateSqlTable": false,
          "columnOptionsSection": {
            "disableTriggers": true,
            "clusteredColumnstoreIndex": false,
            "primaryKeyColumnName": "Id",
            "addStandardColumns": [ "LogEvent" ],
            "removeStandardColumns": [ "Properties" ],
            "additionalColumns": [
              {
                "ColumnName": "EventType",
                "DataType": "bigint",
                "AllowNull": true
              }
            ],
            "id": {
              "columnName": "Id",
              "nonClusteredIndex": true
            },
            "eventType": {
              "columnName": "EventType"
            },
            "message": {
              "columnName": "Message"
            },
            "messageTemplate": {
              "columnName": "MessageTemplate"
            },
            "level": {
              "columnName": "Level",
              "storeAsEnum": false
            },
            "timeStamp": {
              "columnName": "TimeStamp",
              "convertToUtc": true
            },
            "exception": {
              "columnName": "Exception"
            },
            "logEvent": {
              "columnName": "LogEvent"
            }
          }
        }        
      }
    ],
    "Properties": {
      "Application": "App API"
    }
  }
}

在检查我的日志时,我看到了从 Verbose 到 Verbose 的所有内容。

我的 restrictedToMinimumLevel 属性有什么问题吗? 我也尝试将它放在 Args 属性中,但没有成功。

干杯

2 个答案:

答案 0 :(得分:2)

我还没有尝试过,但在 this GitHub 问题上,我认为 restrictedToMinimumLevel 应该在 Args 中。因此,像这样更改您的 WriteTo 配置:

"WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "restrictedToMinimumLevel": "Warning",
          "connectionString": "Server=yada yada yada ;MultipleActiveResultSets=True",
          "tableName": "ErrorLogs",
          "autoCreateSqlTable": false,
          "columnOptionsSection": {
            "disableTriggers": true,
            "clusteredColumnstoreIndex": false,
            "primaryKeyColumnName": "Id",
            "addStandardColumns": [ "LogEvent" ],
            "removeStandardColumns": [ "Properties" ],
            "additionalColumns": [
              {
                "ColumnName": "EventType",
                "DataType": "bigint",
                "AllowNull": true
              }
            ],
            "id": {
              "columnName": "Id",
              "nonClusteredIndex": true
            },
            "eventType": {
              "columnName": "EventType"
            },
            "message": {
              "columnName": "Message"
            },
            "messageTemplate": {
              "columnName": "MessageTemplate"
            },
            "level": {
              "columnName": "Level",
              "storeAsEnum": false
            },
            "timeStamp": {
              "columnName": "TimeStamp",
              "convertToUtc": true
            },
            "exception": {
              "columnName": "Exception"
            },
            "logEvent": {
              "columnName": "LogEvent"
            }
          }
        }        
      }
    ]

答案 1 :(得分:1)

要使 restrictedToMinimumLevel 通过 appSettings.json 的配置工作,restrictedToMinimumLevel 必须位于 Args 部分 as it's described in the documentation 内。 MsSQLServer 接收器没有任何独特之处,需要配置有所不同。

enter image description here

如您所见,只有日志级别为 >= Warning 的事件存储在 SQL Server 表中:

enter image description here


程序.cs

using System;
using System.IO;
using Microsoft.Extensions.Configuration;
using Serilog;
using Serilog.Debugging;

namespace ReproSerilogSO66019586
{
    class Program
    {
        static void Main(string[] args)
        {
            SelfLog.Enable(msg => Console.WriteLine("ERROR: {0}", msg));

            var configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();

            Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .WriteTo.Console()
                .CreateLogger();

            Log.Verbose("This is Verbose!");
            Log.Debug("This is Debug!");
            Log.Information("This is Information!");
            Log.Warning("This is Warning!");
            Log.Error("This is Error!");
            Log.Fatal("This is Fatal!");

            Log.CloseAndFlush();

            Console.ReadLine();
        }
    }
}

appSettings.json

{
    "Serilog": {
        "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.MSSqlServer" ],
        "Enrich": [ "FromLogContext" ],
        "MinimumLevel": {
            "Default": "Verbose"
        },
        "WriteTo": [
            {
                "Name": "MSSqlServer",
                "Args": {
                    "restrictedToMinimumLevel": "Warning",
                    "connectionString": "Server=(local);MultipleActiveResultSets=True",
                    "tableName": "ErrorLogs",
                    "autoCreateSqlTable": true,
                    "columnOptionsSection": {
                        "disableTriggers": true,
                        "clusteredColumnstoreIndex": false,
                        "primaryKeyColumnName": "Id",
                        "addStandardColumns": [ "LogEvent" ],
                        "removeStandardColumns": [ "Properties" ],
                        "additionalColumns": [
                            {
                                "ColumnName": "EventType",
                                "DataType": "bigint",
                                "AllowNull": true
                            }
                        ],
                        "id": {
                            "columnName": "Id",
                            "nonClusteredIndex": true
                        },
                        "message": {
                            "columnName": "Message"
                        },
                        "messageTemplate": {
                            "columnName": "MessageTemplate"
                        },
                        "level": {
                            "columnName": "Level",
                            "storeAsEnum": false
                        },
                        "timeStamp": {
                            "columnName": "TimeStamp",
                            "convertToUtc": true
                        },
                        "exception": {
                            "columnName": "Exception"
                        },
                        "logEvent": {
                            "columnName": "LogEvent"
                        }
                    }
                }
            }
        ],
        "Properties": {
            "Application": "App API"
        }
    }
}