Azure Function 3.1+NLog+结构化日志记录,LoggerName问题



NLog+Azure Functions 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。

根据您的问题,我猜您希望控制Logger的名称,以便更好地使用NLog筛选规则。

而不是这样做:

public FunctionA(ILogger<FunctionA> logger){}

你试过这样要求ILoggerFactory吗:

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

您还可以使用BeginScope或LogEvent属性(如EventId_Id(来发出原点信号。

最新更新