文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在 ASP.Net Core 中使用 Serilog

2024-12-03 11:57

关注

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

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

将日志结构化可以更容易的查询和分析,做法就是在写入的时候定义好数据的格式,这种格式包括:xml,json,或者你希望转成的任何结构。

Serilog 是一个第三方,开源的结构化日志框架,它的高层封装可以让开发者更容易的将日志记录到 console,file 和你能想到的各种 存储系统,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 Serilog。

安装 Serilog

使用 Visual Studio 新建 ASP.Net Core 项目,接下来从 NuGet 上拉几个包,具体如下:

这个包提供了对基本的结构化日志的功能支持。

这个包提供了 Serilog 对 AspNetCore 的支持。

这个包打通了 Serilog 和 Configuration ,这样你就可以直接从 appsettings.json 中读取配置。

Console接收器顾名思义就是将 Serilog 的日志输出到 Console。

实现了对 滚动文件 的支持。

使用 Serilog Sink

Serilog 利用 sink 特性将日志送到不同的地方,比如:text文件,数据库,甚至是 ElasticSearch 中,换句话说,sink 特性可以把日志送到它该去的地方,当所有的 nuget 包都安装好了之后,下面的代码片段展示了如何将日志送到 console 中。

  1. public HomeController(ILogger logger) 
  2.         { 
  3.             using (var logConfig = new LoggerConfiguration().WriteTo.Console().CreateLogger()) 
  4.             { 
  5.                 logConfig.Information("This is a test data."); 
  6.             }; 
  7.  
  8.             _logger = logger; 
  9.         } 

值得注意的是,Serilog 支持多个日志级别,如:verbose, debug, information, warning, error 和 fatal。

有时候为了调试目的,将日志送到 Console 是一个好办法,但将程序部署到生产之后,更通用的做法就是将日志记录到文件中,这样方便在生产上实时查看并做一定程度的日志分析,刚好这里的 Serilog.Sink.RollingFile 支持对滚动文件的支持,下面的代码片段展示了如何通过编程的方式将日志送到文件中。

  1. public HomeController() 
  2.         { 
  3.             var logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo 
  4.                                                   .RollingFile(@"e:\log.txt", retainedFileCountLimit: 7) 
  5.                                                   .CreateLogger(); 
  6.  
  7.             for (int i = 0; i < byte.MaxValue; i++) 
  8.             { 
  9.                 logger.Information($"log {i}"); 
  10.             } 
  11.         } 

使用 Serilog 替换原生的 Logger

在 ASP.NET Core 中内置了 Logger 组件,这一节中我们一起看看如何使用 Serilog 将其进行替换,在 Program.Main 方法中使用如下代码:

  1. public class Program 
  2.    { 
  3.        public static void Main(string[] args) 
  4.        { 
  5.            Log.Logger = new LoggerConfiguration() 
  6.             .MinimumLevel.Debug() 
  7.             .MinimumLevel.Override("Microsoft", LogEventLevel.Information) 
  8.             .Enrich.FromLogContext() 
  9.             .WriteTo.Console() 
  10.             .CreateLogger(); 
  11.  
  12.            try 
  13.            { 
  14.                Log.Information("Starting web host"); 
  15.                CreateHostBuilder(args).Build().Run(); 
  16.            } 
  17.            catch (Exception ex) 
  18.            { 
  19.                Log.Fatal(ex, "Host terminated unexpectedly"); 
  20.            } 
  21.            finally 
  22.            { 
  23.                Log.CloseAndFlush(); 
  24.            } 
  25.        } 
  26.  
  27.        public static IHostBuilder CreateHostBuilder(string[] args) => 
  28.            Host.CreateDefaultBuilder(args) 
  29.              .UseSerilog() 
  30.                .ConfigureWebHostDefaults(webBuilder => 
  31.                { 
  32.                    webBuilder.UseStartup(); 
  33.                }); 
  34.    } 

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

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

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

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

来源:码农读书内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯