(14)ASP.NET Core 中的日志记录 – Python量化投资

(14)ASP.NET Core 中的日志记录

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对象。以下Razor页面示例会创建级别为Information且类别为AboutModel类(Models/AboutModel)的日志: 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服务器启动调试: 看看控制台输出日志记录: 日志“级别”代表所记录事件的严重程度。日志“类别”是与每个日志关联的字符串。ILogger实例会创建“类别”为类型T的完全限定名称的日志。 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部分提供。以下示例显示了典型 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可以轻松写入多个目标。(数据库,文件,控制台)并即时更改日志记录配置。 8.总结 这篇主要讲了asp.net core内置的日志提供程序,内置的日志自带功能还是有限,比如不能写入到.txt文件或数据库中。在项目使用中还是要考虑使用第三方日志提供程序。本篇对于内置的日志提供程序还有:日志消息模板、日志作用域、Azure中的日志记录、日志事件ID等未介绍,具体再参考官方文档。 参考文献: ASP.NET Core 中的日志记录
https://www.cnblogs.com/wzk153/p/11316482.html

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论