ASP.NET|ASP.NET Core记录日志
目录
- 1.前言
- 2.添加日志提供程序
- 3.创建日志
- 3.1启动时(Startup)创建日志
- 3.2在程序中(Program)创建日志
- 4.Configuration
- 5.日志级别
- 6.内置日志记录提供程序
- 7.第三方日志记录提供程序
1.前言 ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API。本文介绍了如何将日志记录API与内置提供应用程序一起使用。
2.添加日志提供程序 日志记录提供应用程序显示或存储日志。例如,控制台提供应用程序在控制台上显示日志,Azure Application Insights提供应用程序将这些日志存储在Azure Application Insights中。要添加提供应用程序,请在Program.cs中调用提供程序的Add{provider name}扩展方法:
public static void Main(string[] args){var webHost = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).ConfigureAppConfiguration((hostingContext, config) =>{var env = hostingContext.HostingEnvironment; config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional: true, reloadOnChange: true); config.AddEnvironmentVariables(); }).ConfigureLogging((hostingContext, logging) =>{//添加appsettings.json中关于日志的Logging节点配置logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); //日志控制台记录提供程序logging.AddConsole(); //日志Debug记录提供程序logging.AddDebug(); //日志EventSource记录提供程序logging.AddEventSourceLogger(); }).UseStartup().Build(); webHost.Run(); }
默认项目模板调用CreateDefaultBuilder,该操作将添加日志记录(控制台、DEBUG、EventSource)提供给应用程序:
public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run(); }public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup();
3.创建日志 创建日志可以从依赖注入(DI)中获取ILogger
public class AboutModel{private readonly ILogger _logger; public AboutModel(ILogger logger) {//ILogger是Core内置日志组件,默认已经注入,无需再次手动注入_logger = logger; }public void OnGet(){var Message = $"About page visited at {DateTime.UtcNow.ToLongTimeString()}"; _logger.LogInformation("Message displayed: {Message}", Message); }}private readonly ILogger _logger; public HomeController(ILogger logger){_logger = logger; }public IActionResult Index(){AboutModel aboutModel = new AboutModel(_logger); aboutModel.OnGet(); return View(); }
通过Kestral服务器启动调试:
文章图片
看看控制台输出日志记录:
文章图片
【ASP.NET|ASP.NET Core记录日志】日志“级别”代表所记录事件的严重程度。日志“类别”是与每个日志关联的字符串。ILogger
3.1启动时(Startup)创建日志
要将日志写入Startup类,构造函数签名需包含ILogger参数:
public class Startup{private readonly ILogger _logger; public Startup(IConfiguration configuration, ILogger logger){Configuration = configuration; _logger = logger; }public IConfiguration Configuration { get; }public void ConfigureServices(IServiceCollection services){_logger.LogInformation("Added TodoRepository to services"); }public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){_logger.LogInformation("In Development environment"); }}}
通过Kestral服务器启动调试看看控制台输出日志记录:
文章图片
3.2在程序中(Program)创建日志
如果使用CreateDefaultBuilder,则可自行选择提供应用程序来替换默认应用程序。调用 ClearProviders,然后添加所需的应用程序。
public class Program{public static void Main(string[] args){var host = CreateWebHostBuilder(args).Build(); var logger = host.Services.GetRequiredService(); logger.LogInformation("Seeded the database."); host.Run(); }public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup().ConfigureLogging(logging =>{logging.ClearProviders(); logging.AddConsole(); }); }
通过Kestral服务器启动调试看看控制台输出日志记录:
文章图片
4.Configuration 日志记录提供程序配置由一个或多个配置提供程序提供:
- 文件格式(INI、JSON 和 XML)。
- 命令行参数。
- 环境变量。
- 内存中的.NET对象。
- 未加密的机密管理器存储。
- 加密的用户存储,如 Azure Key Vault。
- (已安装或已创建的)自定义提供程序。
{"Logging": {"LogLevel": {"Default": "Debug","System": "Information","Microsoft": "Information"},"Console":{"IncludeScopes": true}}}
Logging属性可具有LogLevel和日志提供程序属性(显示控制台)。Logging下的LogLevel属性指定了用于记录所选类别的最低级别。在本例中,System和Microsoft类别在Information级别记录,其他均在Debug级别记录。如果提供程序支持日志作用域,则IncludeScopes将指示是否启用这些域。
5.日志级别 每个日志都指定了一个LogLevel值。日志级别指示严重性或重要程度。如果LogLevel是Warning级别,那么跟踪Trace,Debug,Information级别将不会记录。ASP.NET Core 定义了以下日志级别(按严重性从低到高排列):
- 跟踪Trace = 0
- 调试Debug = 1
- 信息 Information = 2
- 警告 Warning = 3
- 错误 Error = 4
- 严重 Critical = 5
6.内置日志记录提供程序
- 控制台:logging.AddConsole(); dotnet run 查看控制台日志记录输出。
- 调试:logging.AddDebug(); 在 Linux 中,此提供程序将日志写入 /var/log/message。
- EventSource:logging.AddEventSourceLogger();在Windows中,它使用PerfView实用工具收集和查看日志,但尚无支持Linux或macOS的事件集合和显示工具。
- EventLog:logging.AddEventLog();向Windows事件日志发送日志输出。
- TraceSource:logging.AddTraceSource(sourceSwitchName); 应用必须在.NET Framework(而非.NET Core)上运行。
7.第三方日志记录提供程序 适用于ASP.NET Core的第三方日志记录框架,链接地址官方文档中有:
- elmah.io(GitHub 存储库)
- Gelf(GitHub 存储库)
- JSNLog(GitHub 存储库)
- KissLog.net(GitHub 存储库)
- Loggr(GitHub 存储库)
- NLog(GitHub 存储库)
- Sentry(GitHub 存储库)
- Serilog(GitHub 存储库)
- Stackdriver(Github 存储库)
到此这篇关于ASP.NET Core记录日志的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- ASP.NET|ASP.NET Core中的Options选项模式
- 如何优雅的记录操作日志()
- ASP.NET|ASP.NET Core中MVC模式实现路由一
- RT-Thread|RT-Thread记录(六、IPC机制之信号量、互斥量和事件集)
- RT-Thread|RT-Thread记录(七、IPC机制之邮箱、消息队列)
- Blazor组件提交全记录:|Blazor组件提交全记录: FullScreen 全屏按钮/全屏服务 (BootstrapBlazor组件库)
- 记录Jenkins升级到最新版遇到的问题
- 算法|第十届蓝桥杯省赛B组题解记录
- ASP.NET|ASP.NET Core应用启动Startup类简介
- 如何科学衡量广告投放效果(HMS|如何科学衡量广告投放效果?HMS Core分析服务助您科学归因)