在本地运行我的天蓝色计时器触发器时,我遇到了从其他类的方法记录信息的问题。
我有以下定时器触发功能:
public class ExpServiceFuncApp
{
[FunctionName("ExpServiceFuncApp")]
public static void Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, ILogger log)
{
try
{
IServiceCollection services = new ServiceCollection();
services.AddLogging(builder =>
{
builder.AddApplicationInsights(Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", EnvironmentVariableTarget.Process));
builder.SetMinimumLevel(LogLevel.Debug);
})
.AddSingleton<IDataRec, DataRec.DataRec>()
.AddSingleton<IDataProc, DataProc.DataProc>()
.AddSingleton<IDClient, KustoDClient>()
.AddSingleton<IAzureBlobClient, AzureBlobClient>()
.AddSingleton<IAzureKustoClient, AzureKustoClient>()
.AddSingleton<IQueriesSettings, QueriesSettings>()
.AddSingleton<IServiceSettings, ServiceSettings>()
.AddTransient<IRawData, RawData>();
IServiceProvider serviceProvider = services.BuildServiceProvider();
log?.LogInformation("Initiate.");
var dataProc = serviceProvider.GetRequiredService<IDataProc>();
log?.LogInformation("Start Data Process.");
dataProc.Start();
}
catch (Exception ex)
{
}
}
}
在我创建的这个 Azure 函数中,我还有其他正在使用的类,其中包含应该显示的日志。这些类的一个示例如下:
public class KustoDataClientBase
{
protected static async Task<IRawData> GetDataAsync(IAzureKustoClient azureKustoClient, string database, CancellationToken cancellationToken, ILogger logger)
{
var stopwatch = new Stopwatch();
logger?.LogInformation($"Get data from database '{database}'");
stopwatch.Start();
{
//Some code;
}
stopwatch.Stop();
logger?.LogInformation($"Executing queries took {stopwatch.Elapsed:g});
}
}
这里的问题是当我在本地运行这个函数应用程序时,我得到以下结果:
如您所见,我只看到 ExpServiceFunApp 类中的日志,而没有看到其余类中的日志。我有 7 个其他日志也应该出现。
有人可以解释一下这里发生了什么。并不是说我在本地运行,而且这还没有在 Azure 上发布。我应该从计时器触发器的代码中删除一些东西吗?我应该怎么做才能看到允许其他类的所有日志也出现?