ILogger不尊重日志级别的应用程序见解

时间:2018-08-02 15:32:46

标签: c# asp.net-core .net-core azure-application-insights azure-app-service-envrmnt

我一直在尝试使用ASP.NET Core 2.0应用程序设置应用程序见解。在本地运行我的应用程序时,日志将按预期显示在Application Insights中。但是,当部署到Azure App Service时,虽然日志被发送到Application Insights的“请求”表中,但是“例外”或“跟踪”中没有日志显示。

唯一解决此问题的方法是将以下代码行添加到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如下:

namespace TestLoggingApplication
{
    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"
  }
}

1 个答案:

答案 0 :(得分:2)

更新:此处提供了有关正确启用日志捕获的新说明。 https://docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger

启用日志记录支持的正确方法是在loggerFactory.AddApplicationInsights()方法中使用Configure。当您从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);

}