#2248·serilog

使用现有日志管道进行请求范围的最低级别覆盖

作者: vkbishnoi创建于 2026年9月11日更新于 2026年9月15日
标签enhancement

问题 产品应用通常使用警告最小级别来控制日志量和成本。在实时调查期间,可能需要捕获一个特定异步操作的详细调试事件,而不需要在全局范围内增加日志记录。全局日志级别切换会影响每个并发操作。基于命名空间的最小级别覆盖也过于广泛。池级过滤无法解决此问题,因为日志器的根最小级别拒绝的事件从未被创建,因此从未到达池。 期望的行为 允许应用程序暂时降低当前异步执行上下文的有效最小级别。 概念上: 使用 (LogContext.PushMinimumLevel(LogEventLevel.Debug)) { await operation(); } 具体的 API 仅是示例。 预期行为: 调试事件仅在选定的逻辑执行上下文内被启用。 并发操作仍然处于正常的警告最小级别。 覆盖通过异步调用安全地流动。 事件使用现有的池、增强器、格式化和配置。 每个事件仅被发布一次。 释放范围可靠地恢复正常最小级别。 相互嵌套的范围正确地恢复前一个级别。 并行执行上下文不会相互影响。 当前限制 可用的最小级别控制是全局的或基于源上下文。 创建一个单独配置的日志器可以捕获低于主日志器最小级别的事件,但这会重复配置,并引入额外的日志器和池生命周期问题。还可能导致重复事件或单独的输出目标。 问题 执行上下文范围的最小级别覆盖是否适合 Serilog 核心? 如果不是,是否存在一个现有的扩展点,可以通过它实现此功能,同时重用当前的日志管道? 是否存在并发、性能或架构限制,使此功能不适合? 是否有其他 API 或抽象可以更好地适合 Serilog 的架构? 环境 Serilog: 4.3.0 Serilog.AspNetCore: 10.0.0 目标框架: .NET 10

内容来源: serilog/serilog