0

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}' />

天蓝色函数

public FunctionA(ILogger<FunctionA> logger){}

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

4

1 回答 1

0

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

而不是这样做:

    public FunctionA(ILogger<FunctionA> logger){}

您是否尝试过像这样询问ILoggerFactory

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

您还可以使用BeginScope 或 LogEvent 属性(如 EventId_Id)来指示来源。

于 2020-12-15T09:02:35.220 回答