如何在 ASP.Net Core 中使用 Serilog

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

将日志结构化可以更容易的查询和分析,做法就是在写入的时候定义好数据的格式,这种格式包括: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看国外女神级程序员,直播写代码一年的感悟

我第一次直播写代码是在去年七月份。我想要直播一下我在业余时间内为开源项目领域所做的工作&#xff0c;尽管在youtube上的大部分直播都是关于游戏的。我比较擅长于NodeJS的硬件库方面的工作&#xff08;尽管大部分项目都是自己的&#xff09;。并且我在youtube上曾经开启过一…

windows制作定时关机脚本_自动关机、自动打开程序… 让Windows自动执行任何操作...

文章转载于网络&#xff0c;侵删Windows 中有一个非常棒的功能&#xff0c;叫做“任务计划程序”&#xff0c;但是因为它的界面看起来有点复杂&#xff0c;导致很少有人使用它。其实对于任何人而言&#xff0c;“任务计划程序”都是非常棒的工具&#xff0c;它可以让 Windows 在…

techempower拿分系列之aspcore分析

techempower是一个Web Framework Benchmarks测试平台&#xff0c;世界上各大Web框架都参与其中&#xff0c;当然BeetleX也不例外。接下来的几篇文章中讲述aspcore使用怎样的方式在这评测中获取相对比较高的分数&#xff1b;而BeetleX使用了这些技巧之后也在是近测中获取的前10&…

mysqlbinlog工具_mysqlbinlog命令详解 Part 1-实验环境准备

前面的一些章节我们对mysqldump常用命令进行了讲解这个专题的内容为mysqlbinlog命令的详解mysqlbinlog是mySQL中用来处理binlog的工具1. MySQL二进制日志介绍服务器的binlog包含一些event这些event描述了数据库内容的状态&#xff0c;包含了数据修改&#xff0c;服务器重启等&a…

是学习Java还是Python?一张图告诉你!

Java 和 Python 一直都是两种很火很强大的编程语言&#xff0c;对于刚开始起步学习编程的同学来说&#xff0c;会迷惑且最经常问的问题是&#xff0c;我该学 Java 还是 Python&#xff0c;是不是 Python 容易学&#xff0c;或是应该先学什么编程语言等等这样的问题。作为一名 J…

Java游戏吉他英雄_《吉他英雄:现场》《摇滚乐队4》横向对比:各有所长!

《吉他英雄&#xff1a;现场》《摇滚乐队4》横向对比&#xff1a;各有所长&#xff01;2015-11-29 10:29:07来源&#xff1a;界面编辑&#xff1a;评论(0)作为摇滚游戏界两大支柱&#xff0c;最近回归的《吉他英雄&#xff1a;现场(Guitar Hero Live)》(以下简称GHL)和《摇滚乐…

_云计算学习路线图素材课件,Linux中软件安装的方式

很多初学者感觉云计算就是一个听起来比较高大上的名词&#xff0c;每次想要了解它的时候都像是雾里看花&#xff0c;迷迷糊糊看不真切&#xff0c;至于它是干什么的就更不了解了&#xff0c;其实云计算学起来在IT行业中还是比较容易上手的&#xff0c;接下来我给大家分享Linux中…

Redis集群搭建很easy

前言 哨兵模式虽然让读写分离更加高可用&#xff0c;但单台服务器由于本身的内存和CPU瓶颈&#xff0c;对于高并发和大数据业务的应用场景还是远远不能满足&#xff1b;对于这种情况&#xff0c;有点经验的小伙伴会毫不犹豫的想到集群&#xff0c;搞他好几个节点&#xff0c;负…

国庆中秋活动——读完这两套书,宝宝就变小小物理学家了!

通知&#xff01;通知&#xff01;通知&#xff01;&#xff01;&#xff01;玩酷屋十一黄金优惠限时限量秒杀活动&#xff0c;能抢到算你厉害&#xff1a;1、活动期间 2017/10/02 22:30 ——2017/10/05 22:302、【宝宝的物理学】第一辑 原价&#xff1a;189元&#xff0c;秒…

java的正则表达式 CPU_小心踩雷!一个小小的正则表达式竟把CPU拖垮......

原标题&#xff1a;小心踩雷&#xff01;一个小小的正则表达式竟把CPU拖垮......“前几天线上一个项目监控信息突然报告异常&#xff0c;上到机器上后查看相关资源的使用情况&#xff0c;发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具&#xff0c;我们导出了出问题…

欲善其事,先利其器 | IDCF第6期DevOps案例研究回顾(附视频)

2021年&#xff0c;会有哪些“意想不到”在等待我们&#xff1f;2021年&#xff0c;会有哪些“变与不变”在等待我们&#xff1f;这些&#xff0c;都未可知。借假修真&#xff0c;唯一可知的是过去有哪些值得我们借鉴与学习&#xff0c;并帮助我们更好前进的经验。2021年开端&a…

电脑任务管理器快捷键_电脑知识小常识

0、计算机专业的学生的电脑常识未必有你多&#xff0c;电脑坏了找他们没用。1、重启。不管啥问题&#xff0c;上来就是重启。2、找一个学过计算机的来重启。3、还不行就让那个学过计算机的给你重装个系统。4、再不行就换个电脑吧。5、妹子可以忽视以上规则&#xff0c;直接找计…

大数据迁徙图:逃离北上广,他们竟然去了这里!

“做出这个决定&#xff0c;我们考虑了很久。”不久前&#xff0c;高铭离开了工作生活12年的北京&#xff0c;举家回到故乡重庆。“重庆房价比北京便宜得多&#xff0c;孩子上学的问题也好解决。”高铭的经历并非个案。最近几年&#xff0c;“逃离北上广”成为经久不衰的热门话…

内存缓存MemoryCache

内存缓存MemoryCache实现了ICache接口&#xff0c;Redis同样实现了ICache接口&#xff0c;两者在缓存操作上达到了高度抽象统一。应用设计时一律使用ICache接口&#xff0c;开发环境装配为MemoryCache&#xff0c;生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布…

quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码

一、QuickType 工具功能简介QuickType 是一款可以根据 json 文本生成指定语言(如 Type Script&#xff0c;C&#xff0c;,Java&#xff0c;C#&#xff0c;Go 等)类型声明代码的工具。例如我们在写接口调用处理收到响应数据的逻辑时一般分为如下两步&#xff1a; 1.根据接口返回…

endpointimpl怎么填参数_这是一篇VLOOKUP函数家族主要用法的合集,XLOOKUP来了!真香!但是,没有office365吃不着怎么办?...

最近这几个月&#xff0c;XLOOKUP震惊了Excel界&#xff0c;传言三头六臂无所不能&#xff0c;一个人把LOOKUP全家兄弟姐妹的活都给抢了。最开始我是不以为意的&#xff0c;但是相关的信息越来越多&#xff0c;我终于忍不住&#xff0c;今天去买了一套office365&#xff0c;发现…

1个月教你学会用Python实现机器学习

什么是机器学习&#xff1f;在最简单的层面上&#xff0c;机器学习只是优化数学方程式的过程。有几种不同的机器学习&#xff0c;都有不同的目的。机器学习中最流行的两种形式是监督学习和无监督的学习。 我们将在下面介绍他们的工作原理&#xff1a;. 监督学习&#xff1a;监督…

ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试

点击上方蓝字关注“汪宇杰博客”导语ASP.NET Core 从 2.2 版本起&#xff0c;在 IIS 下可以使用 InProcess 模式提高性能&#xff0c;国外大神 Rick Strahl 对此有一片详细的文章。3年过去了&#xff0c;现在 ASP.NET Core 已经到了 5.0 版本&#xff0c;不同服务器之间的性能有…

sql两个表查不同数据_产品操作MySQL第6篇 – 数据过滤-WHERE子句

MYSQL本资料为产品岗位作为日常工作参考&#xff0c;语言口语化At 2019/4/26 By David.Yang如何使用限定条件来进行数据过滤&#xff1f;在前问当中&#xff0c;我们已经学会到了SELECT查询&#xff0c;在过程当中多次接触了WHERE这个关键词&#xff0c;打过预防针应该知道他就…

win10必须禁用的服务_【亲测】Win10系统如何彻底禁止自动更新 亲测有效的Win10关闭自动更新方法...

昨天有人称Win10系统更新依然无法彻底关闭&#xff0c;今天再来补充一下&#xff0c;肯定可以&#xff01;不少用户反映自己的Win10系统更新无法彻底关闭&#xff0c;网上提供的关闭Win10更新的教程&#xff0c;关闭之后还是会自动更新Win10系统&#xff0c;而今天装机之家分享…