邢台电脑维修:〖总结〗:利用asp.net core日志进行生产环境下的【错误排】查(asp.net core version 2.2,用IIS 做服务器[)

admin 3个月前 (07-12) 科技 42 1

『概述』

〖{“ 调[试”}〗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‘〖《的》〗〖【<文件>】〗’,<日志会保存到这里>面。

 

logging provider

〖从名称〗“stdoutLogEnabled”「来看」,stdout, 表示[“『标准输出』”,『即』控制台输出。‘试着写一句’Console.WriteLine(xxx),【“〖‘在’〗”】.log{〖【<文件>】〗中}果然就可以看到【 【输出〖《的》〗内容】[】。((如))果是【“〖‘在’〗”】〖{“ 调[试”}〗环境,可以【“〖‘在’〗”】输出窗口/ASP.NET Core Web“服务”『器』看到Console【 【输出〖《的》〗内容】[】。asp.net core mvc 《项目》代码模板默认‘“{<(添加)>}”’[「了三“个”」logging provider:Console、Debug、EventSource。VS《〖《的》〗输出》窗口/ASP.NET Core Web“服务”『器』,(显示)〖《的》〗就是Console「这“个”」logging provider【 【输出〖《的》〗内容】[】,{而输出窗口}/〖{“ 调[试”}〗,‘显示〖《的》〗是’Debug〖《的》〗。(所以),stdout_xxx_xxx.log〖【<文件>】〗,保存〖《的》〗就是Console logging provider输出{〖《的》〗日志}。

【观察】VS《〖《的》〗输出》窗口,<可以发现>,〖同一条〗日志内容,【“〖‘在’〗”】“〖{“ 调[试”}〗”「和」“ASP.NET Core Web“服务”『器』”中输出〖《的》〗格式是不同〖《的》〗。

 

「日志“级别”」

ASP.NET Core定义了几“个”「日志“级别”」, 表示[日志〖《的》〗严重程度,「从低」到高分别是Trace 、Debug 、Information 、Warning 、Error 、Critical 。可以设置一“个”最低「日志“级别”」,比((如))设置成Warning, 将屏蔽[Trace 、Debug 、Information“级别”{〖《的》〗日志}。最低「日志“级别”」可以给每“个”logging provider“分”别设置,((如))果没有具体设置,‘将采用默认’设置。((如)),设置默认「日志“级别”」为Information:

"Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }

“分”别设置Debug、Console{〖《的》〗日志}“级别”:

  "Logging": {
    "Debug": {
      "LogLevel": {
        "Default": "Information"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Debug"
      }
    },
    "LogLevel": {
      "Default": "Debug"
    }
  },

为什么针对具体〖《的》〗logging provider「也标上」"Default"?因为可以再针对日志〖《的》〗Log category“分”别设置:

  "Logging": {
    "Console": {
      "LogLevel": {
        "Microsoft.AspNetCore.Mvc.Razor.Internal": "Warning",
        "Microsoft.AspNetCore.Mvc.Razor.Razor": "Debug",
        "Microsoft.AspNetCore.Mvc.Razor": "Error",
        "Default": "Information"
      }
    },
    "LogLevel": {
      "Default": "Debug"
    }
  }

<关于>Log category〖《的》〗概念请自行查阅官方{文档},《不再赘述》。

值得注意〖《的》〗【时】,【“〖‘在’〗”】网站运行状态下,〖((修改))〗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"
    }
  }

‘技巧’

用浏览『器』查看.log〖【<文件>】〗, 日志有更新[,「刷新一下就好了」。

「参考资料」

1、‘有关’“日志“提”供程序”、“「日志“级别”」”、“「日志筛选」”(等概念),请参考官方{文档}:Logging in .NET Core and ASP.NET Core

2、LoggingAdvanced.Console

,

Sunbet

Sunbett www.0577meeting.com〖提供官方〗APP《下载》, 游戏[火爆,<口碑极好>,“服务”一流,「一直是」sunbet会员〖《的》〗首选。

网友评论

  • (*)

最新评论

  • Allbet代理 2020-07-12 00:00:49 回复

    联博接口www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。顶起来啊朋友们

    1

文章归档

站点信息

  • 文章总数:642
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1010
  • 评论总数:267
  • 浏览总数:7544