使用 Serilog.Sinks.GoogleCloudLogging 时如何将所有 SQL 异常提升到 FATAL 日志级别?

问题描述 投票:0回答:1

我在 .NET 应用程序中使用 Serilog 以及

Serilog.Sinks.GoogleCloudLogging
将日志发送到 Datadog。我想自动将所有 SQL 异常 (
SqlException
) 提升到
Fatal
(或
Critical
)日志级别,无论它们最初如何记录(例如,
Error
Warning
)。

我尝试过使用丰富器和过滤器,但似乎日志级别在到达接收器之前并未有效修改,并且日志仍然以其原始日志级别显示在 Datadog 中(例如,错误而不是致命)。

我尝试过的:

  1. 自定义丰富器:我创建了一个丰富器来检测和修改

    SqlException
    日志事件。但是,Google Cloud Logging 中的日志级别保持不变。

  2. 过滤器:我应用过滤器将

    SqlException
    日志提升到致命级别,但这在 Google Cloud Logging 接收器中并没有按预期工作。

  3. ExceptionHandlingMiddleware
    :我还尝试了一个中间件来全局捕获异常并在记录之前修改日志级别,但该级别在 Google Cloud 中仍然显示为 Error 而不是 Fatal。

有没有办法修改使用

SqlException
时将所有
Serilog.Sinks.GoogleCloudLogging
日志条目记录为致命的日志级别?

c# .net exception google-cloud-logging serilog-exceptions
1个回答
0
投票

您可以通过创建自定义LogEventFilter来检查和修改带有SqlException的日志条目。

public class SqlExceptionFilter : ILogEventFilter
{
    public bool IsEnabled(LogEvent logEvent)
    {
        // Check if the exception is an SqlException
        if (logEvent.Exception is SqlException)
        {
            // Change the log level to Fatal
            logEvent = logEvent.WithLevel(LogEventLevel.Fatal);
        }

        // Always allow logging to proceed, but ensure that SqlException logs are treated as Fatal
        return true;
    }
}

用途:

// Configure Serilog with Google Cloud Logging and the custom SqlException filter
        Log.Logger = new LoggerConfiguration()
            .Filter.With<SqlExceptionFilter>()  // Add the custom filter
            .WriteTo.GoogleCloudLogging(projectId: "your-project-id")
            .CreateLogger();

        try
        {
            // Your code that might throw SqlException
        }
        catch (SqlException ex)
        {
            Log.Error(ex, "A SQL exception occurred");
        }
© www.soinside.com 2019 - 2024. All rights reserved.