如何设置 Serilog 在记录消息时调用 SQL 服务器中的存储过程?

How do you set up Serilog to call a stored procedure in SQL Server when logging messages?

如何设置 Serilog 在记录消息时调用 SQL 服务器中的存储过程?我看到了如何使用 MS SQL Server sink 将消息直接存储在数据库 table 中,但我想改为调用存储过程。

我不知道 Serilog 有任何预建的存储过程接收器。

您可以通过实现 ILogEventSink 接口自己调用存储过程:

class StoredProcedureSink : ILogEventSink
{
    public StoredProcedureSink(/* Connection info etc. */) { ... }

    public void Emit(LogEvent logEvent)
    {
        // Invoke sproc using logEvent data
    }
}

这些是在配置时插入的:

var sink = new StoredProcedureSink(/* ... */);

Log.Logger = new LoggerConfiguration()
    .WriteTo.Sink(sink)
    .CreateLogger();