

如何在 ASP.Net Core 中使用 Serilog
source link: http://developer.51cto.com/art/202102/644267.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文转载自微信公众号「码农读书」,作者码农读书 。转载本文请联系码农读书公众号。
记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式。
将日志结构化可以更容易的查询和分析,做法就是在写入的时候定义好数据的格式,这种格式包括: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/article/3314985/how-to-use-serilog-in-aspnet-core.html
Recommend
-
20
在项目开发中常常会需要做发送 Email 的功能,在 ASP.NET Core 中你可以用 MailKit 来实现 Email 的发送, MailKit 是一个开源的客户端库,可用在 Windows,Linux 或者 Mac 上,本篇文章就来讨论在...
-
16
.Net Core Console DI, HttpClientFactory and Serilog I needed to create a .Net Core 3.0 console app that makes HTTP calls and log results to a text file. It took me awhile and I used a few resources, so I’m creating this article for f...
-
7
ASP.NET Core 是一个轻量级,模块化的框架,常用来在 Windows,Linux 和 MacOS 上构建高性能,现代化的web框架,不像过去的 Asp.NET,在 ASP.NE...
-
13
ASP.Net Core 是微软开源的跨平台、可扩展、轻量级的模块化框架,可用于构建高性能的web应用程序。中间件组件可以注入到 ASP.Net Core 请求管道中...
-
13
ASP.NET Core 是一个开源的、跨平台的、轻量级模块化框架,可用于构建高性能、可伸缩的web应用程序,你也许不知道 ASP.NET Core 中有一个藏得很深...
-
11
ASP.NET Core 中内置了对依赖注入的支持,可以使用 依赖注入 的方式在运行时实现组件注入,这样可以让代码更加灵活,测试和可维护,通常有三种方式可以实现依赖注入。 构造函数注入 属性注入 方法注入 构造函数 这种注...
-
13
利用IHttpClientFactory可以无缝创建HttpClient实例,避免手动管理它们的生命周期。 当使用ASP.Net Core开发应用程序时,可能经常需要通过HttpClient调用WebAPI的方法以检查终结点是否正常工作。要实现这一点,通常需要实例化HttpClient...
-
7
ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配置还支持 层级方式 ,在这篇文章中,我们将会...
-
4
在 .NET Core 日志模型 中对日志整体实现方式进行了介绍,通过使用内置日志记录器来实现日志的输出路径。而在实际项目开发中,使用第三方日志框架来记录日志也是非常多的,首先一般基础的内置日志记...
-
7
Shorts Series – Add or Enable Serilog in ASP.NET Core 7.0 Serilog is a third-party, open-source structured logging library. It provides diagnostic lo...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK