【问题标题】:Azure Function 3.1 + NLog + Structured Logging, Issues with LoggerNameAzure Function 3.1 + NLog + 结构化日志记录,LoggerName 问题
【发布时间】:2020-11-30 23:49:26
【问题描述】:

NLog + Azure 函数 3.1

Azure 函数启动类

public override void Configure(IFunctionsHostBuilder builder)
 {
    var logger = LogManager.Setup()
               .SetupExtensions(e => e.AutoLoadAssemblies(false))
               .LoadConfigurationFromFile(currentDirectory + Path.DirectorySeparatorChar + 'NLog.config')
               .GetLogger(configuration.GetSection('logging:nlog:defaultloggername')?.Value);
  
    builder.Services.AddLogging((logger) =>
             {
                 //logger.ClearProviders();
                 logger.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
                 logger.AddNLog();
             }).BuildServiceProvider(); 
}

//NLog.config

<variable name='commonLayout' value='${longdate}|${logger}|${uppercase:${level}}|${message}, ${all-event-properties:format=[key]=[value]:separator=, } ${exception}' />

Azure 函数

public FunctionA(ILogger<FunctionA> logger){}

结构化日志记录不适用于 Azure 函数 3.1。 loggername 吐出 FunctionA,我该如何更改它以在 Azure 函数中使用 NLog 对象。 注意:我使用的是 Azure Function 3.1,不过我可以在 .net core 2.1 中注入 NLog。

【问题讨论】:

    标签: azure function logging nlog


    【解决方案1】:

    我从你的问题猜想你想控制 Logger 的名称,这样你就可以更好地利用 NLog-Filtering-Rules。

    不要这样做:

        public FunctionA(ILogger<FunctionA> logger){}
    

    您是否尝试过这样询问ILoggerFactory

        public FunctionA(ILoggerFactory logFactory)
        {
            var logger = logFactory.CreateLogger("MyFavoriteLoggerName");
            logger.LogError("Test");
        }
    

    您还可以使用BeginScope or LogEvent properties 之类的 EventId_Id 来指示来源。

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多