【问题标题】:ASP.NET Core + ApplicationInsights Logging Errors as TraceASP.NET Core + ApplicationInsights 将错误记录为跟踪
【发布时间】:2019-04-04 03:55:21
【问题描述】:

我正在使用 Microsoft.ApplicationInsights.AspNetCore (https://www.nuget.org/packages/Microsoft.ApplicationInsights.AspNetCore)。

我通过在 Programs.cs 和我的启动类中添加 .UseApplicationInsights() 启用了应用程序洞察:

    loggerFactory.AddApplicationInsights(app.ApplicationServices);

这一切都很好,我可以在应用洞察中看到请求,但是当我尝试记录错误时(例如在我的控制器中):

        _logger.LogError("My Error Log");
        _logger.LogError("Test", new Exception("Test"));

两者都被记录为跟踪事件,而不是应用洞察中的异常。

如何让它记录为异常?

【问题讨论】:

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


    【解决方案1】:

    如果您想在应用洞察中将错误记录为异常,则应更改这行代码_logger.LogError("Test", new Exception("Test"));

    将其更改为_logger.LogError(new Exception(), "test");,这意味着new Exception()应该是第一个参数。

    您可以通过右键单击您的项目 -> 添加 -> Application Insights Telemetry 添加应用程序洞察 SDK,这对于自动执行某些操作非常有用(即添加 .UseApplicationInsights() in Programs.cs):

    我还发布了我的测试步骤:

    1.如上所述添加应用洞察SDK

    2.在Startup.cs -> Configure()方法中添加loggerFactory.AddApplicationInsights(app.ApplicationServices,LogLevel.Information);,代码如下:

                public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
                {
                    if (env.IsDevelopment())
                    {
                        app.UseDeveloperExceptionPage();
                    }
                    else
                    {
                        app.UseExceptionHandler("/Error");
                        app.UseHsts();
                    }
    
                    app.UseHttpsRedirection();
                    app.UseStaticFiles();
                    app.UseCookiePolicy();
    
                    app.UseMvc();
    
                    //Add this line of code
                    loggerFactory.AddApplicationInsights(app.ApplicationServices,LogLevel.Information);
                }
    

    3.然后在你想记录错误的地方:

            public class AboutModel : PageModel
            {
                private ILogger _logger;
    
                public AboutModel(ILogger<AboutModel> logger)
                {
                    _logger = logger;
                }
    
                public string Message { get; set; }
    
                public void OnGet()
                {
                    _logger.LogInformation("it is just a test herexxxx");
    
                   //Only this format can log as exception
                    _logger.LogError(new Exception(), "it is a new Exceptionxxxx");
    
                   //it will log as trace
                    _logger.LogError("error logs xxx");
                    Message = "Your application description page.";
                }
            }
    

    4.测试结果如下:

    【讨论】:

    • 谢谢,这很有帮助!
    • loggerFactory.AddApplicationInsights(app.ApplicationServices,LogLevel.Information); 现在至少在 .Net 5 上已过时。
    【解决方案2】:

    由于Microsoft.ApplicationInsights.AspNet v2.7 问题和接受的答案已过时,因为在ILoggerFactory 上调用AddApplicationInsights 现在已过时。

    请参考the official docs

    文档中的要点:

    1. ApplicationInsightsLoggerProvider 默认启用。
    2. 可以在appsettings.json 中配置捕获的日志类型(如果您确实需要,也可以通过编程方式)
        "Logging": {
            "LogLevel": {
                "Default": "Warning"
            },
            "ApplicationInsights": {
                "LogLevel": {
                    "Default": "Error"
                }
            }
        }
    

    【讨论】:

      【解决方案3】:

      OP 说:

      两者都被记录为跟踪事件,而不是应用洞察中的异常。

      我在使用 Serilog 和 ASP.NET Core 3.1 的配置中解决了这个特定问题,遵循了包括上述 Alex Klaus 在内的最新建议。

      我的解决方案在此评论中:https://stackoverflow.com/a/64893138。具体来说,我在 Serilog 部分中没有检测密钥。借助 Application Insights 和 Serilog 部分中的检测密钥,异常开始在 Azure Application Insights 中显示为异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 2020-02-09
        • 1970-01-01
        • 2018-03-11
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        相关资源
        最近更新 更多