Ani*_*ish 3 .net c# azure azure-application-insights .net-core
我正在直接从这里测试控制台应用程序的代码: https: //learn.microsoft.com/en-us/azure/azure-monitor/app/ilogger#
我基本上复制了代码并将其指向一个新的 azure 应用程序见解实例。但是,应用程序见解中没有显示任何日志。我错过了什么吗?
static void Main(string[] args)
{
// Create DI container.
IServiceCollection services = new ServiceCollection();
// Add the logging pipelines to use. We are using Application Insights only here.
services.AddLogging(loggingBuilder =>
{
// Optional: Apply filters to configure LogLevel Trace or above is sent to ApplicationInsights for all
// categories.
loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Trace);
loggingBuilder.AddApplicationInsights(******);
});
// Build ServiceProvider.
IServiceProvider serviceProvider = services.BuildServiceProvider();
ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogCritical("critical message working");
// Begin a new scope. This is optional. Epecially in case of AspNetCore request info is already
// present in scope.
using (logger.BeginScope(new Dictionary<string, object> { { "Method", nameof(Main) } }))
{
logger.LogWarning("Logger is working - warning"); // this will be captured by Application Insights.
}
}
Run Code Online (Sandbox Code Playgroud)
代码是正确的,但您遇到了 ApplicationInsights 和控制台应用程序的已知问题 - 在 ApplicationInsights 可以将数据发送到后端之前应用程序已死亡。(数据不是立即发送,而是分批发送,间隔发送。)
添加约 30 秒的睡眠时间应该会对您的情况有所帮助。线程.睡眠(31000);
在常规控制台应用程序中,文档建议进行显式刷新。 https://learn.microsoft.com/en-us/azure/azure-monitor/app/console#full-example
但在 ILogger 情况下,您无法控制 TelemetryClient 实例。因此,最好的选择是控制通道,并在通道上调用flush,然后进行短暂的睡眠。修改后的代码如下。
class Program
{
static void Main(string[] args)
{
// Create DI container.
IServiceCollection services = new ServiceCollection();
var channel = new InMemoryChannel();
services.Configure<TelemetryConfiguration>(
(config) =>
{
config.TelemetryChannel = channel;
}
);
// Add the logging pipelines to use. We are using Application Insights only here.
services.AddLogging(loggingBuilder =>
{
// Optional: Apply filters to configure LogLevel Trace or above is sent to ApplicationInsights for all
// categories.
loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Trace);
loggingBuilder.AddApplicationInsights("***");
});
// Build ServiceProvider.
IServiceProvider serviceProvider = services.BuildServiceProvider();
ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogCritical("critical message working");
// Begin a new scope. This is optional. Epecially in case of AspNetCore request info is already
// present in scope.
using (logger.BeginScope(new Dictionary<string, object> { { "Method", nameof(Main) } }))
{
logger.LogWarning("Logger is working - warning"); // this will be captured by Application Insights.
}
channel.Flush();
Thread.Sleep(1000);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8687 次 |
| 最近记录: |