You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MediatR IRequestPreProcessor日志记录遇类型警告的解决方法

修复MediatR请求日志的"Incorrect type is used for contextual logging"警告

问题原因

这个警告源于.NET日志系统的设计规范:ILogger<T>的泛型参数用于标识日志的来源类型,你当前用请求类型TRequest作为泛型参数,不符合上下文日志的设计逻辑——日志应该关联到处理请求的行为类LoggingBehaviour<TRequest>,而非请求本身。

修复方案

将ILogger的泛型参数从TRequest改为LoggingBehaviour<TRequest>,具体修改如下:

修改后的完整代码

public sealed class LoggingBehaviour<TRequest> : IRequestPreProcessor<TRequest> where TRequest : notnull
{
    private readonly ILogger<LoggingBehaviour<TRequest>> _logger;

    public LoggingBehaviour(ILogger<LoggingBehaviour<TRequest>> logger)
    {
        _logger = logger;
    }

    public async Task Process(TRequest request, CancellationToken cancellationToken)
    {
        var requestName = typeof(TRequest).Name;
        _logger.LogInformation("Request: {Name} {@Request}", requestName, request);
    }
}

说明

修改后,日志的上下文会标记为LoggingBehaviour<TRequest>(运行时会显示具体请求类型替换后的完整类名),既符合.NET日志的上下文设计规范、消除警告,同时依然能通过requestName和@Request字段记录请求的具体信息,不影响日志的业务价值。

内容的提问来源于stack exchange,提问作者nop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:11:00