asp.net core 系列 13 日志
一.概述
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- -调试--窗口):
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等未介绍,具体再参考官方文档。
参考文献
官方资料:
下一篇: 逛商场
推荐阅读
-
你所不知道的ASP.NET Core MVC/WebApi基础系列 (一)
-
ASP.NET Core MVC/WebApi基础系列1
-
asp.net core系列之模型绑定和验证方法
-
asp.net core 系列之并发冲突的深入理解
-
asp.net core系列 72 Exceptionless使用介绍
-
ASP.NET Core 2.2 WebApi 系列【九】使用SignalR
-
Asp.net Core全局异常监控和记录日志
-
asp.net core系列 74 Exceptionless服务端安装
-
ASP.NET Core依赖注入系列教程之服务的注册与提供
-
ASP.NET Core 2.2 WebApi 系列【七】泛型仓储模式和工作单元