我正在使用.Net中的Azure函数和WebJob,并使用TelemetryClient将日志发送到ApplicationInsights。
对于WebJob和Azure函数,我具有几乎相同的日志记录代码。
对于azure函数,我可以在Requests,Traces和customMetrics中看到我的数据,但是对于WebJob,customMetrics中没有可用的数据,而仅在Traces和Requests中可用。
我的EventHub WebJob日志记录代码
public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
{
foreach (var eventData in messages)
{
Log log = LogManager.GetLogger();
RequestTelemetry requestTelemetry = new RequestTelemetry { Name = "EventhubWebJob" };
requestTelemetry.Properties.Add("MessageId", Guid.NewGuid().ToString());
IOperationHolder<RequestTelemetry> operation = log.TelemetryClient.StartOperation(requestTelemetry);
operation.Telemetry.Success = true;
log.Trace($"Message processing start...");
try
{
log.Trace("Message received.");
Console.WriteLine($"Message received.");
}
catch (Exception ex)
{
operation.Telemetry.Success = false;
log.Trace(ex.Message);
throw;
}
finally
{
log.Trace($"Message processing completed.");
log.TelemetryClient.StopOperation(operation);
}
}
return context.CheckpointAsync();
}
我可以在下面看到与WebJob所需的Function相同的数据。
答案 0 :(得分:1)
如果要将ApplicationInsights
与WebJob一起使用,则即使当前是beta版,也需要使用Microsoft.Azure.WebJobs.Logging.ApplicationInsights
nuget软件包。
您总共需要三个软件包:
配置JobHostConfiguration
string instrumentationKey = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY");
if (!string.IsNullOrEmpty(instrumentationKey))
{
// build up a LoggerFactory with ApplicationInsights and a Console Logger
config.LoggerFactory = new LoggerFactory().AddApplicationInsights(instrumentationKey, null).AddConsole();
config.Tracing.ConsoleLevel = TraceLevel.Off;
}
注意:请不要忘记在应用程序设置中添加APPINSIGHTS_INSTRUMENTATIONKEY
。
关于ILogger
过滤,您可以参考Application Insights Integration
Wiki,CategoryLevels
允许您为特定类别指定日志级别,以便您可以微调日志输出。
您可以添加带有代码的LogError
:
public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger)
{
//you can directly use this line of code.
logger.LogError(new Exception(),"it is a test error...");
}
更新:
更新: