【发布时间】:2021-12-23 06:08:46
【问题描述】:
我遇到了一些日志调用未到达 App Insights 但其他的问题
我添加了一个控制器来测试这个
public class LogController : ControllerBase
{
private readonly ILogger<BankingController> _logger;
private readonly IServiceProvider _services;
public LogController(ILogger<LogController> logger,
IServiceProvider services)
{
_logger = logger;
_services = services;
}
[HttpGet("test-logging")]
public async Task TestLogging()
{
_logger.Log(LogLevel.Information, "Test Logging controller - information manual");
_logger.LogTrace("Test Logging controller - trace");
_logger.LogInformation("Test Logging controller - information");
_logger.LogWarning("Test Logging controller - warning");
_logger.LogError("Test Logging controller - error");
_logger.LogCritical("Test Logging controller - critical");
var logger = _services.GetRequiredService<ILogger<LoggingController>>();
logger.Log(LogLevel.Information, "DIRECT Test Logging controller - information manual");
logger.LogTrace("DIRECT Test Logging controller - trace");
logger.LogInformation("DIRECT Test Logging controller - information");
logger.LogWarning("DIRECT Test Logging controller - warning");
logger.LogError("DIRECT Test Logging controller - error");
logger.LogCritical("DIRECT Test Logging controller - critical");
}
}
此处的日志记录调用均未到达 App Insights
但是,在 API 的另一部分,在 program.cs 中,我们有一个到达 App Insights 的日志记录调用
public static class IWebHostExtensions
{
public static IWebHost MigrateDbContext<TContext>(this IWebHost webHost, Action<TContext,IServiceProvider> seeder) where TContext : DbContext
{
using (var scope = webHost.Services.CreateScope())
{
var services = scope.ServiceProvider;
var logger = services.GetRequiredService<ILogger<TContext>>();
var context = services.GetService<TContext>();
try
{
logger.LogInformation($"Migrating database associated with context {typeof(TContext).Name}");
var retry = Policy.Handle<SqlException>()
.WaitAndRetry(new TimeSpan[]
{
TimeSpan.FromSeconds(3),
TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(8),
});
retry.Execute(() =>
{
//if the sql server container is not created on run docker compose this
//migration can't fail for network related exception. The retry options for DbContext only
//apply to transient exceptions.
context.Database.Migrate();
});
logger.LogInformation($"Migrated database associated with context {typeof(TContext).Name}");
}
catch (Exception ex)
{
logger.LogError(ex, $"An error occurred while migrating the database used on context {typeof(TContext).Name}");
}
}
return webHost;
}
}
有人遇到过这种情况吗?
我尝试了一个全新的 App Insights 实例
如您所见,用于 logger 的方法使用 ServiceProvider,就像适用于迁移的方法一样
我真的需要正常的 ILogger 约定才能可靠地工作
我正在使用 .NET Core 3.1
在我的 startup.cs 我有
services.AddApplicationInsightsTelemetry();
我已尝试更改我的 appsettings 中的日志记录级别,但我的自定义消息仍然没有被记录
"Logging": {
"ApplicationInsights": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Trace",
"System": "Trace"
}
},
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"System": "Warning"
}
},
保罗
【问题讨论】:
标签: c# azure logging azure-application-insights