如何在 ASP.Net Core 中使用 Serilog

开发 前端
记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式。

[[380078]]

本文转载自微信公众号「码农读书」,作者码农读书 。转载本文请联系码农读书公众号。

记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式。

将日志结构化可以更容易的查询和分析,做法就是在写入的时候定义好数据的格式,这种格式包括: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; 
        } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

值得注意的是,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}"); 
            } 
        } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

使用 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>(); 
               }); 
   } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

从上面的代码中可以看到,我在 CreateHostBuilder 中使用了 UseSerilog() 扩展方法来启动 Serilog,这样就做好了 Serilog 的替换工作,接下来可以在 Controller 中通过依赖注入的方式获取 logger 实例,如下代码所示:

public IActionResult Index() 
        { 
            logger.LogInformation("hello world"); 
 
            return View(); 
        } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

日志是一个应用程序不可或缺的一部分,所以选择一款 灵活 + 简单 的日志框架就显得特别重要了,Serilog 提供了低配置和易使用的特性让我们方便的将日志送到各个地方。

译文链接:https://www.infoworld.com/article/3314985/how-to-use-serilog-in-aspnet-core.html

责任编辑:武晓燕 来源: 码农读书
相关推荐

2021-03-17 09:45:31

LazyCacheWindows

2021-02-06 21:40:13

SignalR通讯TypeScript

2021-03-10 09:40:43

LamarASP容器

2021-02-28 20:56:37

NCache缓存框架

2021-01-07 07:39:07

工具接口 Swagger

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa开源框架

2021-03-03 22:37:16

MediatR中介者模式

2021-01-31 22:56:50

FromServiceASP

2021-02-07 17:29:04

监视文件接口

2021-08-10 07:27:42

ASP.NETFluentd日志

2021-06-22 16:59:56

微软.NETC# 软件开发

2021-04-12 07:03:10

轻量级模块化框架

2021-01-26 14:57:00

中间件应用模块化

2021-01-04 05:44:54

框架日志

2022-08-01 08:00:00

开发工具跟踪侦听器

2017-10-20 08:52:11

内存缓存并发模式Linux

2009-02-05 14:02:46

SmtpMail发送邮件ASP.NET

2021-04-14 07:35:12

Json格式化日期

2021-11-01 14:52:38

ElasticSear索引SQL
点赞
收藏

51CTO技术栈公众号