记录日志的一个作用就是不便对应用程序进行跟踪和排错考察,在理论利用上都是引入 日志框架
,但如果你的 日志文件
蕴含非结构化的数据,那么查问起来将是一个噩梦,所以须要在记录日志的时候采纳结构化形式。
将日志结构化能够更容易的查问和剖析,做法就是在写入的时候定义好数据的格局,这种格局包含:xml,json,或者你心愿转成的任何构造。
Serilog 是一个第三方,开源的结构化日志框架,它的高层封装能够让开发者更容易的将日志记录到 console,file 和你能想到的各种 存储系统
,这篇文章咱们将会探讨如何在 ASP.Net Core 中应用 Serilog。
装置 Serilog
应用 Visual Studio 新建 ASP.Net Core 我的项目,接下来从 NuGet 上拉几个包,具体如下:
- Serilog
这个包提供了对根本的结构化日志的性能反对。
- Serilog.AspNetCore
这个包提供了 Serilog 对 AspNetCore 的反对。
- Serilog.Settings.Configuration
这个包买通了 Serilog 和 Configuration ,这样你就能够间接从 appsettings.json 中读取配置。
- Serilog.Sinks.Console
Console接收器顾名思义就是将 Serilog 的日志输入到 Console。
- Serilog.Sinks.RollingFile
实现了对 滚动文件
的反对。
应用 Serilog Sink
Serilog 利用 sink 个性将日志送到不同的中央,比方:text文件,数据库,甚至是 ElasticSearch 中,换句话说,sink 个性能够把日志送到它该去的中央,当所有的 nuget 包都装置好了之后,上面的代码片段展现了如何将日志送到 console 中。
public HomeController(ILogger<HomeController> logger) { using (var logConfig = new LoggerConfiguration().WriteTo.Console().CreateLogger()) { logConfig.Information("This is a test data."); }; _logger = logger; }
值得注意的是,Serilog 反对多个日志级别,如:verbose, debug, information, warning, error 和 fatal。
有时候为了调试目标,将日志送到 Console 是一个好方法,但将程序部署到生产之后,更通用的做法就是将日志记录到文件中,这样不便在生产上实时查看并做肯定水平的日志剖析,刚好这里的 Serilog.Sink.RollingFile
反对对滚动文件的反对,上面的代码片段展现了如何通过编程的形式将日志送到文件中。
public HomeController() { var logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo .RollingFile(@"e:\log.txt", retainedFileCountLimit: 7) .CreateLogger(); for (int i = 0; i < byte.MaxValue; i++) { logger.Information($"log {i}"); } }
应用 Serilog 替换原生的 Logger
在 ASP.NET Core 中内置了 Logger 组件,这一节中咱们一起看看如何应用 Serilog 将其进行替换,在 Program.Main
办法中应用如下代码:
public class Program { public static void Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Console() .CreateLogger(); try { Log.Information("Starting web host"); CreateHostBuilder(args).Build().Run(); } catch (Exception ex) { Log.Fatal(ex, "Host terminated unexpectedly"); } finally { Log.CloseAndFlush(); } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
从下面的代码中能够看到,我在 CreateHostBuilder 中应用了 UseSerilog()
扩大办法来启动 Serilog,这样就做好了 Serilog 的替换工作,接下来能够在 Controller 中通过依赖注入的形式获取 logger 实例,如下代码所示:
public IActionResult Index() { logger.LogInformation("hello world"); return View(); }
日志是一个应用程序不可或缺的一部分,所以抉择一款 灵便
+ 简略
的日志框架就显得特地重要了,Serilog 提供了低配置和易使用的个性让咱们不便的将日志送到各个中央。
译文链接:https://www.infoworld.com/art...
更多高质量干货:参见我的 GitHub: csharptranslate