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

.NET Core中NLog如何捕获非Controller场景的控制器名称并手动设置字段

手动设置NLog的aspnet-mvc-controller和aspnet-mvc-action字段

针对非MVC模式的操作(比如tusdotnet),可以通过以下几种方式手动填充这两个字段:

1. 使用异步安全的上下文(推荐)

利用NLog的MappedDiagnosticsLogicalContext(MDLC),它适配异步Web场景,能自动隔离不同请求的上下文。在tusdotnet的处理逻辑前后添加作用域:

using NLog.MappedDiagnosticsLogicalContext;

// 在tusdotnet处理代码的起始处
using (MDLC.SetScoped("aspnet-mvc-controller", "TusUpload"))
using (MDLC.SetScoped("aspnet-mvc-action", "HandleFileUpload"))
{
    // 执行tusdotnet的上传逻辑
    _logger.LogInformation("文件上传请求正在处理");
}

作用域结束后字段会自动恢复原值,不会干扰其他请求的日志记录。

2. 单条日志直接传入属性

如果仅需给特定日志条目设置字段,可以在调用日志方法时附加自定义属性:

_logger.LogInformation(
    "文件上传完成",
    new 
    { 
        aspnet_mvc_controller = "TusUpload", 
        aspnet_mvc_action = "HandleFileUpload" 
    }
);

NLog会自动识别这些属性,与原有布局中的{aspnet-mvc-controller}、{aspnet-mvc-action}对应填充。

3. 全局中间件批量处理

如果所有tusdotnet请求都需要统一设置字段,可以添加自定义中间件,根据请求路径匹配后自动注入上下文:

app.Use(async (context, next) =>
{
    // 根据实际的tusdotnet路径调整判断条件
    if (context.Request.Path.StartsWithSegments("/tus/upload"))
    {
        using (MDLC.SetScoped("aspnet-mvc-controller", "TusUpload"))
        using (MDLC.SetScoped("aspnet-mvc-action", "HandleFileUpload"))
        {
            await next();
        }
    }
    else
    {
        await next();
    }
});

将此中间件放在日志中间件之前,确保上下文在日志记录前已被设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:01:06