欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net core 系列 13 日志

程序员文章站 2022-04-28 13:26:08
一.概述 ASP.NET Core 支持适用于各种内置和第三方日志记录, 供程序的日志记录 API,本文介绍了如何将日志记录 API 与内置提供程序一起使用。对于第三方日志记录提供程序使用,文章最后有链接。 1.1 添加内置日志提供程序 日志记录提供程序能够用于显示日志信息或存储日志,比如控制台提供 ......

一.概述

  asp.net core 支持适用于各种内置和第三方日志记录, 供程序的日志记录 api,本文介绍了如何将日志记录 api 与内置提供程序一起使用。对于第三方日志记录提供程序使用,文章最后有链接。

 

  1.1 添加内置日志提供程序

    日志记录提供程序能够用于显示日志信息或存储日志,比如控制台提供程序在控制台上显示日志,azure application insights 提供程序会将这些日志存储在 azure application insights 中。 可通过添加多个提供程序将日志发送到多个目标。

    要添加提供程序,请在 program.cs 中调用提供程序的 add{provider name} 扩展方法:

        public static iwebhostbuilder createwebhostbuilder(string[] args) =>
            webhost.createdefaultbuilder(args)
                .configureappconfiguration((hostingcontext, config) =>
                {
                    config.setbasepath(directory.getcurrentdirectory());
                    config.addjsonfile("starship.json", false, true);
                })
               .configurelogging((hostingcontext, logging) =>
              {
                  //日志的 默认记录提供程序
                  //添加appsettings.json中关于日志的logging节点配置
                  logging.addconfiguration(hostingcontext.configuration.getsection("logging"));
                  //日志控制台记录提供程序
                  logging.addconsole();
                  //日志debug记录提供程序
                  logging.adddebug();
                  //日志eventsource 记录提供程序
                  logging.addeventsourcelogger();
              })
                .usestartup<startup>();

    默认项目模板调用 createdefaultbuilder 扩展方法,该操作将添加以上日志记录提供程序(控制台,debug,eventsource):

    webhost.createdefaultbuilder(args)

    如果要自行选择提供程序来替换默认提供程序。 可以调用 clearproviders,然后再添加所需的提供程序。

        public static iwebhost buildwebhost(string[] args) =>
         webhost.createdefaultbuilder(args)
        .usestartup<startup>()
        .configurelogging(logging =>
        {
            logging.clearproviders();
            //只有日志控制台记录提供程序
            logging.addconsole();
        })
        .build();

    

  1.2  创建日志

    从 di 中获取 ilogger<tcategoryname> 对象。以下 razor 页面示例会创建日志“级别”为 warning,“t类别”为 page2model,的日志:

    public class page2model : pagemodel
    {
        private readonly ilogger _logger;

        public page2model(ilogger<page2model> logger)
        {
            _logger = logger;
        }

        public void onget()
        {
            _logger.logwarning("load the page2");
        }
    }

    如下所示(vs- -调试--窗口):

asp.net core 系列 13 日志

 

   1.3 启动startup时创建日志

    要将日志写入 startup 类,构造函数签名需包含 ilogger 参数:

        public class startup
    {
        private readonly ilogger _logger;

        public startup(iconfiguration configuration, ilogger<startup> logger)
        {
            configuration = configuration;
            _logger = logger;
        }
    }

    

  1.4  在program中创建日志

    public static void main(string[] args)
    {
      var host = buildwebhost(args);
      var logger = host.services.getrequiredservice<ilogger<program>>();
      logger.loginformation("seeded the database.");

      host.run();
    }

 

  1.5   日志配置configuration

     日志记录提供程序配置由一个或多个配置提供程序提供,它们可以是:

           (1)文件格式(ini、json 和 xml)。

           (2)命令行参数。

           (3)环境变量。

           (4)内存中的 .net 对象。

           (5)未加密的机密管理器存储。

           (6)加密的用户存储,如 azure key vault。

           (7)(已安装或已创建的)自定义提供程序。

    例如,日志记录配置通常由应用设置文件的 logging 节点部分提供。 以下示例应用了典型 appsettings.development.json 文件的内容:

    {
     "logging": {
        "loglevel": {
          "default": "debug",
          "system": "information",
          "microsoft": "information"
    },
      "console":
      {
        "includescopes": true
      }
    }
  }

    上面的配置文件不需要使用显示加config.addjsonfile,这个在环境章节已讲过,当程序的环境(aspnetcore_environment)是development时,该文件中的logging节点配置生效。

    logging 下的 loglevel 属性指定了用于记录所选类别的最低级别,在本例中,system 和 microsoft类别在 information 级别记录,其他均在 debug 级别记录。

    logging 下的其他属性均指定了日志记录提供程序。 本示例针对控制台提供程序。 如果提供程序支持日志作用域,则 includescopes 将指示是否

   

  1.6 日志级别

    每个日志都指定了一个 loglevel 值。 日志级别指示严重性或重要程度。如果loglevel是warning级别,那么跟踪trace  ,debug ,information 级别将不会记录。

    asp.net core 定义了以下日志级别(按严重性从低到高排列): 

         (1) 跟踪trace = 0

         (2) 调试debug = 1

         (3) 信息 information = 2

         (4) 警告 warning = 3

         (5) 错误 error = 4

         (6) 严重 critical = 5

 

  1.7 内置日志记录提供程序

    (1) 控制台

           logging.addconsole(); dotnet run 查看控制台日志记录输出。  

    (2) 调试

           logging.adddebug(); 在 linux 中,此提供程序将日志写入 /var/log/message

    (3) eventsource

           logging.addeventsourcelogger(); 在 windows 中,它使用 perfview 实用工具收集和查看日志,但尚无支持 linux 或 macos 的事件集合和显示工具。

    (4) eventlog

          logging.addeventlog();向 windows 事件日志发送日志输出

    (5) tracesource

           logging.addtracesource(sourceswitchname);应用必须在 .net framework(而非 .net core)上运行。

 

  1.8 第三方日志记录提供程序

         适用于 asp.net core 的第三方日志记录框架,链接地址官方文档中有:

           elmah.io(github 存储库)

           gelf(github 存储库)

           jsnlog(github 存储库)

           kisslog.net(github 存储库)

           loggr(github 存储库)

           nlog(github 存储库)

           sentry(github 存储库)

           serilog(github 存储库)

           stackdriver(github 存储库)

    例如使用nlog

      nlog是一个灵活的免费日志记录平台,适用于各种.net平台,包括.net标准。nlog可以轻松写入多个 目标。(数据库,文件,控制台)并即时更改日志记录配置。

 

  总结:

    这篇主要讲了asp.net core内置的日志提供程序,  内置的日志自带功能还是有限,比如不能写入到.txt文件或数据库中。在项目使用中还是要考虑使用第三方日志提供程序。本篇对于内置的日志提供程序还有:日志消息模板、日志作用域、azure 中的日志记录、日志事件 id等未介绍,具体再参考官方文档。

 

  参考文献

  官方资料: