ASP.NET Core如何实现日志记录功能?

2026-03-30 10:111阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1559个文字,预计阅读时间需要7分钟。

ASP.NET Core如何实现日志记录功能?

目录

1.前言

2.添加日志提供程序

3.创建日志

3.1 启动时(Startup)创建日志 3.2 在程序中(Program)创建日志

4.配置

5.日志级别

6.内置日志记录器提供程序

7.第三方日志记录器提供程序

7.1 前言

目录
  • 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<Startup>() .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<Startup>();

          3.创建日志

          创建日志可以从依赖注入(DI)中获取ILogger<TCategoryName>对象。以下Razor页面示例会创建级别为Information且类别为AboutModel类(Models/AboutModel)的日志:

          public class AboutModel { private readonly ILogger _logger; public AboutModel(ILogger<AboutModel> 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<AboutModel> _logger; public HomeController(ILogger<AboutModel> logger) { _logger = logger; } public IActionResult Index() { AboutModel aboutModel = new AboutModel(_logger); aboutModel.OnGet(); return View(); }

          通过Kestral服务器启动调试:

          看看控制台输出日志记录:

          日志“级别”代表所记录事件的严重程度。日志“类别”是与每个日志关联的字符串。ILogger<T>实例会创建“类别”为类型T的完全限定名称的日志。

          3.1启动时(Startup)创建日志

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

          public class Startup { private readonly ILogger _logger; public Startup(IConfiguration configuration, ILogger<Startup> 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<ILogger<Program>>(); logger.LogInformation("Seeded the database."); host.Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); }); }

          通过Kestral服务器启动调试看看控制台输出日志记录:

          4.Configuration

          日志记录提供程序配置由一个或多个配置提供程序提供:

          ASP.NET Core如何实现日志记录功能?

          • 文件格式(INI、JSON 和 XML)。
          • 命令行参数。
          • 环境变量。
          • 内存中的.NET对象。
          • 未加密的机密管理器存储。
          • 加密的用户存储,如 Azure Key Vault。
          • (已安装或已创建的)自定义提供程序。

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

          { "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 存储库)

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

          到此这篇关于ASP.NET Core记录日志的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持自由互联。

          本文共计1559个文字,预计阅读时间需要7分钟。

          ASP.NET Core如何实现日志记录功能?

          目录

          1.前言

          2.添加日志提供程序

          3.创建日志

          3.1 启动时(Startup)创建日志 3.2 在程序中(Program)创建日志

          4.配置

          5.日志级别

          6.内置日志记录器提供程序

          7.第三方日志记录器提供程序

          7.1 前言

          目录
          • 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<Startup>() .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<Startup>();

                  3.创建日志

                  创建日志可以从依赖注入(DI)中获取ILogger<TCategoryName>对象。以下Razor页面示例会创建级别为Information且类别为AboutModel类(Models/AboutModel)的日志:

                  public class AboutModel { private readonly ILogger _logger; public AboutModel(ILogger<AboutModel> 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<AboutModel> _logger; public HomeController(ILogger<AboutModel> logger) { _logger = logger; } public IActionResult Index() { AboutModel aboutModel = new AboutModel(_logger); aboutModel.OnGet(); return View(); }

                  通过Kestral服务器启动调试:

                  看看控制台输出日志记录:

                  日志“级别”代表所记录事件的严重程度。日志“类别”是与每个日志关联的字符串。ILogger<T>实例会创建“类别”为类型T的完全限定名称的日志。

                  3.1启动时(Startup)创建日志

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

                  public class Startup { private readonly ILogger _logger; public Startup(IConfiguration configuration, ILogger<Startup> 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<ILogger<Program>>(); logger.LogInformation("Seeded the database."); host.Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); }); }

                  通过Kestral服务器启动调试看看控制台输出日志记录:

                  4.Configuration

                  日志记录提供程序配置由一个或多个配置提供程序提供:

                  ASP.NET Core如何实现日志记录功能?

                  • 文件格式(INI、JSON 和 XML)。
                  • 命令行参数。
                  • 环境变量。
                  • 内存中的.NET对象。
                  • 未加密的机密管理器存储。
                  • 加密的用户存储,如 Azure Key Vault。
                  • (已安装或已创建的)自定义提供程序。

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

                  { "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 存储库)

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

                  到此这篇关于ASP.NET Core记录日志的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持自由互联。