如何在多租户 Asp.Net 核心应用程序中动态更改租户的 Serilog 最低日志级别



在我们的asp.net 6应用程序中,我们使用Serilog文件接收器在一个单独的文件夹中为每个租户(客户)编写文件日志。我们从Request URL中获得TenantId,并在Serilog中充实属性,生成带有TenantId的文件夹路径。

在appsettings。

在生产环境中,对于给定的租户,最小级别是错误,但希望暂时将Serilog切换到调试级别。

考虑到性能,我们如何为给定的租户/请求进行切换,假设所需的最低级别可以从上下文(如HttpContext或类似的)中读取。

目前,最低日志级别只能在应用程序范围内设置,并且无法为特定的执行管道(web请求或队列消息处理程序)覆盖它。

您可以尝试使用LoggingLevelSwitch来切换日志级别

Log.Logger = new LoggerConfiguration().MinimumLevel.ControlledBy(switcher).WriteTo.File("").CreateLogger();

这里有一个类似的例子:https://social.msdn.microsoft.com/forums/en us/8344afa6 - 109 b - 43 - c5 - 8 ba7 - 2 - e01fa52c4ce/using serilog logginglevelswitch?forum=aspdotnetcore

:

我将分享我尝试过的所有代码:

Log.Logger = new LoggerConfiguration().MinimumLevel.ControlledBy(LoggingLevelSwitcher.Switcher).WriteTo.File(@"path").CreateLogger();
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog();
public class LoggingLevelSwitcher
{
public static readonly LoggingLevelSwitch Switcher
= new LoggingLevelSwitch(LogEventLevel.Information);

}

在控制器:

public IActionResult Privacy()
{
LoggingLevelSwitcher.Switcher.MinimumLevel = LogEventLevel.Warning;

return View();
}

你会发现在你访问隐私页面后,记录器不会记录信息

最新更新