ILogger 不遵守 Application Insights 的日志级别
ILogger Not Respecting Log Level for Application Insights
我一直在尝试使用 ASP.NET Core 2.0 应用程序设置 Application Insights。 运行 我的应用程序在本地时,日志按预期显示在 Application Insights 中。但是,当部署到 Azure 应用服务时,当日志被发送到 Application Insights 中的“请求”table 时,没有日志显示在“异常”或“跟踪”中。
唯一似乎可以解决此问题的方法是将以下代码行添加到 Startup.Configure()
:
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Information);
上面的解决方案是不可取的,因为我们希望根据环境配置不同的日志级别,因此首选基于配置的解决方案。另外,我的猜测是问题与配置相关,因为它在本地运行良好。没有在 Azure 中完成的特殊配置。
这里是完整的 Startup.Configure()
:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Information);
}
我的Program.cs如下:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) => WebHost
.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.Build();
}
appsettings.json(InstrumentationKey
为保护隐私而替换):
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Debug"
}
},
"Console": {
"LogLevel": {
"Default": "Debug"
}
},
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"ApplicationInsights": {
"InstrumentationKey": "00000000-0000-0000-0000-000000000000"
}
}
更新:此处提供了正确启用日志捕获的新说明。 https://docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger
启用日志记录支持的正确方法是在 Configure
方法中使用 loggerFactory.AddApplicationInsights()
。当您从 Visual Studio 运行 时,您不需要此行,因为 VS 会在幕后为您完成。但是在VS外的运行时是不行的,所以请加上loggerFactory.AddApplicationInsights
方法。
https://github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/Logging
要根据环境获得不同的日志级别,请在条件语句中使用此行。类似于以下示例。
if(env.IsDeveleopment())
{
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Debug);
}
else if(env.IsPreProduction())
{
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Verbose);
}
else
{
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Warning);
}
很久没问这个问题了,但我遇到了同样的问题,我不想 re-deploy 只是为了改变 LogLevel。
经过大量研究但没有令人满意的答案,针对不同用例合并了来自各种来源的信息,我发现了这个对我有用的解决方案。
您可能需要在 appsettings.json 的“日志记录”部分中添加一个“ApplicationInsights”部分:
"Logging": {
"LogLevel": {
"Default": "Information"
},
"ApplicationInsights": {
"LogLevel": {
"Default": "Information"
}
}
}
这使得它无需任何代码更改即可运行。
我一直在尝试使用 ASP.NET Core 2.0 应用程序设置 Application Insights。 运行 我的应用程序在本地时,日志按预期显示在 Application Insights 中。但是,当部署到 Azure 应用服务时,当日志被发送到 Application Insights 中的“请求”table 时,没有日志显示在“异常”或“跟踪”中。
唯一似乎可以解决此问题的方法是将以下代码行添加到 Startup.Configure()
:
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Information);
上面的解决方案是不可取的,因为我们希望根据环境配置不同的日志级别,因此首选基于配置的解决方案。另外,我的猜测是问题与配置相关,因为它在本地运行良好。没有在 Azure 中完成的特殊配置。
这里是完整的 Startup.Configure()
:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Information);
}
我的Program.cs如下:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) => WebHost
.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.Build();
}
appsettings.json(InstrumentationKey
为保护隐私而替换):
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Debug"
}
},
"Console": {
"LogLevel": {
"Default": "Debug"
}
},
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"ApplicationInsights": {
"InstrumentationKey": "00000000-0000-0000-0000-000000000000"
}
}
更新:此处提供了正确启用日志捕获的新说明。 https://docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger
启用日志记录支持的正确方法是在 Configure
方法中使用 loggerFactory.AddApplicationInsights()
。当您从 Visual Studio 运行 时,您不需要此行,因为 VS 会在幕后为您完成。但是在VS外的运行时是不行的,所以请加上loggerFactory.AddApplicationInsights
方法。
https://github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/Logging
要根据环境获得不同的日志级别,请在条件语句中使用此行。类似于以下示例。
if(env.IsDeveleopment())
{
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Debug);
}
else if(env.IsPreProduction())
{
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Verbose);
}
else
{
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Warning);
}
很久没问这个问题了,但我遇到了同样的问题,我不想 re-deploy 只是为了改变 LogLevel。
经过大量研究但没有令人满意的答案,针对不同用例合并了来自各种来源的信息,我发现了这个对我有用的解决方案。
您可能需要在 appsettings.json 的“日志记录”部分中添加一个“ApplicationInsights”部分:
"Logging": {
"LogLevel": {
"Default": "Information"
},
"ApplicationInsights": {
"LogLevel": {
"Default": "Information"
}
}
}
这使得它无需任何代码更改即可运行。