总结:利用asp.net core日志进行生产环境下的错误排查(asp.net core version 2.2,用IIS做服务器)

Posted sdbob

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结:利用asp.net core日志进行生产环境下的错误排查(asp.net core version 2.2,用IIS做服务器)相关的知识,希望对你有一定的参考价值。

概述

调试asp.net core程序时,在输出窗口中,在输出来源选择“调试”或“xxx-ASP.NET Core Web服务器”时,可以看到类似“info:Microsoft.AspNetCore.Hosting.Internal.WebHost[2] Request finished in 285.6ms 200 text/css”这样的内容,这就是asp.net core的日志

如果出现了未捕获的异常,在输出窗口中可以看到出错信息,如:fail: Microsoft.AspNetCore.Server.Kestrel[13]……An unhandled exception was thrown by the application. System.NullReferenceException: 未将对象引用设置到对象的实例。在……行号 xx 在……行号 xx

如果在生产环境中可以把这些出错信息保存下来,将对排查代码错误很有帮助。

代码发布后,可以看到一个web.config文件,其中有一个aspNetCore标签,把stdoutLogEnabled属性设置为true。这样,在网站运行后,默认会在/logs文件夹下产生一个stdout_xxx_xxx.log的文件,日志会保存到这里面。

 

控制日志数量

修改appsettings.json中的Logging/LogLevel/Default值。日志级别从低到高为Trace 、Debug 、Information 、Warning 、Error 、Critical 、None。级别越低,输出的日志越多。如果仅想输出错误信息,可把级别设置成Error。如果把级别设置成None,将会阻止所有级别的日志输出。

值得注意的时,在网站运行状态下,修改appsettings.json中的上述配置,不会造成网站重启(而修改web.config会造成网站重启),但对日志级别的控制会立即生效。

 

添加web.config到源代码项目中

新建的asp.net core 2.2项目,默认没有web.config文件。可以通过“添加”、“新建项”、“Web配置文件”的方式手动添加。这样就可以在源码项目中设定web.config的内容了。

 

使日志包含时间

1、安装nuget包LoggingAdvanced.Console

2、修改Program.cs的CreateWebHostBuilder方法,在其中的方法调用链的最后,调用ConfigureLogging方法,修改后的代码如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureLogging((hostingContext, loggingBuilder) =>
                 {
                     loggingBuilder.ClearProviders();//清除所有提供者

                     loggingBuilder.AddDebug();//添加Debug提供者

                     loggingBuilder.AddEventSourceLogger();//添加EventSource提供者

                     var loggingSection = hostingContext.Configuration.GetSection("Logging");

                     loggingBuilder.AddConsoleAdvanced(loggingSection);//添加LoggingAdvanced.Console提供者
                 });

3、修改appsettings.json的中的Logging部分,修改后如下:

"Logging": {
    "IncludeTimestamp": true,
    "IncludeLogNamespace": true,
    "TimestampPolicy": {
      "TimeZone": "Ulaanbaatar Standard Time",
      "Format": "yyyy/MM/dd HH:mm:ss.fff"
    },
    "LogLevel": {
      "Default": "Warning"
    }
  }

 

参考资料

有关“日志提供程序”、“日志级别”、“日志筛选”等概念,请参考官方文档

Logging in .NET Core and ASP.NET Core

以上是关于总结:利用asp.net core日志进行生产环境下的错误排查(asp.net core version 2.2,用IIS做服务器)的主要内容,如果未能解决你的问题,请参考以下文章

ASP .NET CORE 根据环境变量支持多个 appsettings.json

Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别)

在 ASP.NET Core 应用程序中禁用 Quartz.Net 的调试日志记录

[第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

[翻译] ASP.NET Core 利用 DockerElasticSearchKibana 来记录日志

结合Jexus + Kestrel 部署 asp.net core 生产环境