这是由于在 Fan-Out 模式下,日志记录器会多次实例化并记录相同的日志。为了避免这种情况,可以利用 DI(依赖注入)来创建单例记录器并使用该实例记录日志。下面是示例代码:
public static class MyLogger
{
private static ILogger _loggerInstance;
public static ILogger LoggerInstance
{
get
{
if (_loggerInstance == null)
{
// Use DI to create a single instance of ILogger
var serviceProvider = new ServiceCollection()
.AddLogging()
.BuildServiceProvider();
_loggerInstance = serviceProvider.GetService()
.CreateLogger("MyFunction");
}
return _loggerInstance;
}
}
}
public async Task Run([ActivityTrigger] string[] input, ILogger log)
{
foreach (var item in input)
{
MyLogger.LoggerInstance.LogInformation(item); // Use the single ILogger instance to log
}
}
在此示例中,MyLogger
类包含一个 LoggerInstance
属性,该属性会返回一个 ILogger
实例。在 Activity 函数中,我们使用此实例记录日志,而不是使用 log
参数。
这样,每个日志记录器只会被实例化一次,并且我们可以使用相同的实例记录任意数量的日志,从而避免重复记录。