一. 概述
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 https://nlog-project.org/ :
NLog 是一个灵活的免费日志记录平台, 适用于各种. NET 平台, 包括. NET 标准. NLog 可以轻松写入多个 目标.(数据库, 文件, 控制台)并即时更改日志记录配置.
总结:
这篇主要讲了 ASP.NET core 内置的日志提供程序, 内置的日志自带功能还是有限, 比如不能写入到. txt 文件或数据库中. 在项目使用中还是要考虑使用第三方日志提供程序. 本篇对于内置的日志提供程序还有: 日志消息模板, 日志作用域, Azure 中的日志记录, 日志事件 ID 等未介绍, 具体再参考官方文档.
参考文献
官方资料: ASP.NET core 日志
来源: https://www.cnblogs.com/MrHSR/p/10299968.html