Функция Azure 3.1 NLog структурированное ведение журнала, проблемы с именем входа

#azure #function #logging #nlog

#azure #функция #ведение журнала #nlog

Вопрос:

Функции 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. Имя журнала выдает функцию, как я могу изменить это, чтобы использовать объект NLog в функции Azure.
Примечание: я использую функцию Azure 3.1, но могу внедрить NLog в .net core 2.1.

Ответ №1:

Из вашего вопроса я предполагаю, что вы хотите управлять именем регистратора, чтобы вы могли лучше использовать правила фильтрации NLog.

Вместо того, чтобы делать это:

     public FunctionA(ILogger<FunctionA> logger){}
 

Вы пытались запросить ILoggerFactory таким образом:

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

Вы также можете использовать свойства BeginScope или LogEvent, такие как EventId_Id, для указания источника.