我正在使用 Serilog 登录我的 .net 6 Web API,并希望公开一个端点以使我能够更改全局日志记录级别。这将使我能够通过前端切换开关切换级别。这是我到目前为止所实施的,但似乎根本没有任何效果。即使只是在启动时设置日志记录级别也不会改变“信息”的默认级别。我正在使用 .net DI 来配置一切。
这是我到目前为止所拥有的:
程序.cs
var levelSwitcher = new LoggingLevelSwitch(LogEventLevel.Verbose);
builder.Services.AddSingleton<LoggingLevelSwitch>(levelSwitcher);
var seriLogger = new LoggerConfiguration()
.MinimumLevel.ControlledBy(levelSwitcher)
.ReadFrom.Configuration(builder.Configuration)
.Enrich.FromLogContext()
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
然后在我的端点控制器中
private readonly LoggingLevelSwitch _levelSwitch;
private readonly ILogger<DiagnosticsController> _logger;
public DiagnosticsController(ILogger<DiagnosticsController> logger, LoggingLevelSwitch levelSwitch)
{
_logger = logger;
_levelSwitch = levelSwitch;
}
[HttpGet(Name = "SwitchLoggingLevel")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public IActionResult SwitchLoggingLevel(string level)
{
if (Enum.TryParse(level, out Serilog.Events.LogEventLevel newLoggingLevel))
{
_levelSwitch.MinimumLevel = newLoggingLevel;
return Ok();
}
return BadRequest();
}
Run Code Online (Sandbox Code Playgroud)
从我在调试器中看到的是,记录器仍然处于“信息”最低级别,即使调用端点并传入或多或少的详细级别,也没有任何效果。
我最初的想法是,我在 DI 环境中初始化切换器的方式不正确,但我不确定如何正确执行(即创建一个服务,然后立即在记录器的后续配置中使用它),但是即使这是不正确的,实际的最低级别甚至没有按照配置设置为“错误”。
是否可以根据标签和位置获取Instagram Feed?
我希望所有用#stackExchange标记的图像都位于约翰内斯堡(周围半径100公里)