如何在 NET Core 7、C# 中向所有日志添加方法名称

问题描述 投票:0回答:1

我想将方法/函数名称添加到记录器,以便用户定义的方法/函数名称在 Azure Application Insights 中可见。控制器名称自动记录在 ActionName 属性下,但是日志记录不是在控制器中发生,而是在控制器调用的用户定义方法中发生。所以问题是;是否有一个中间件可以将所有日志附加到调用它们的方法/函数? 我正在开发 NET CORE 7 WebApi 并使用 Azure Application Insights。

c# asp.net-core azure-application-insights
1个回答
0
投票

据我所知,ASP.NET Core 使用日志范围来实现此功能(参见示例)。它可以做到这一点,因为此时控制器和操作方法已解析,您可以将此信息添加到范围中。对于管道中的未知方法调用显然无法做到这一点(至少在中间件中)。

我不知道一种简单的开箱即用的方法来实现(我很确定有第三方库可以做到这一点),但你有几个选择:

  1. 在方法中手动管理日志范围(参见官方文档)。

  2. 通过

    ILogger
    接口创建您自己的扩展方法,该方法将接受呼叫者信息属性。例如:

    public static class LoggingExts
    {
        public static void LogInfoWithCaller(this ILogger logger, string message, [CallerMemberName] string callerMemberName = "", params object[] p)
        {
            // build new message and log it
        }
    }
    

    虽然使用起来会有点麻烦(如果你使用

    params
    参数进行结构化日志记录):

    logger.LogInfoWithCaller("qweeqw {test}", p: ["Test"]);
    
  3. 如果您广泛使用 DI,您可以使用装饰器模式。例如,您可以使用源生成器(或用于此类任务的其他一些自动化)来生成装饰器并相应地注册。

© www.soinside.com 2019 - 2024. All rights reserved.