小编Mar*_*ern的帖子

通过 API 端点的 Serilog 级别切换器

我正在使用 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 环境中初始化切换器的方式不正确,但我不确定如何正确执行(即创建一个服务,然后立即在记录器的后续配置中使用它),但是即使这是不正确的,实际的最低级别甚至没有按照配置设置为“错误”。

c# serilog .net-6.0

7
推荐指数
1
解决办法
601
查看次数

Instagram Feed基于标签和地理位置

是否可以根据标签和位置获取Instagram Feed?

我希望所有用#stackExchange标记的图像都位于约翰内斯堡(周围半径100公里)

c# instagram

5
推荐指数
1
解决办法
9547
查看次数

标签 统计

c# ×2

.net-6.0 ×1

instagram ×1

serilog ×1