在API服务级别配置Serilog Log.Logger

时间:2019-07-01 14:06:24

标签: c# asp.net-web-api logging serilog

我有一个日志记录用例,其中我想以与使用Serilog Log.Logger的所有其他API服务不同的级别记录特定的API调用。我当前对该应用程序的记录器配置如下:

Log.Logger = new LoggerConfiguration()
                .MinimumLevel.ControlledBy(_loggingLevelSwitch)
                .WriteTo.MSSqlServer(connectionString, "LogTable")
                .CreateLogger();

因此,当我调用SetLoggingLevelSwitch来更新日志级别时,它将更新整个应用程序的级别,这是预期的。我想知道的是,在单个API调用中,是否可以仅针对该API调用的范围覆盖日志级别,而不会影响应用程序其余部分的日志级别?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您可以使用任何容器注册通用记录器,然后从中创建ILogger

public YourApiController(LoggerConfiguration loggerOrdinaryConfig)
{
    _strangeApiLogger = loggerOrdinaryConfig.
        MinimumLevel.Verbose()
        .CreateLogger();
}

使用创建记录器

{{1}}

但这可能会导致测试困难。

这就是为什么您最好查看docs(按属性过滤)甚至是LogContext

upd:出于易于单元测试的原因,始终尝试使用接口