如何在 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
如何在 ASP.Net Core 中使用 Serilog相关推荐
- 在 ASP.NET Core 中使用 Serilog 使用 Fluentd 将日志写入 Elasticsearch
在 ASP.NET Core 中使用 Serilog 使用 Fluentd 将日志写入 Elasticsearch 原文来自:https://andrewlock.net/writing-logs-t ...
- 如何在 ASP.NET Core 中使用 HttpClientFactory ?
ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...
- 如何在 ASP.Net Core 中使用 Autofac
依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...
- 如何在 ASP.Net Core 中使用 Lamar
ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...
- 如何在 ASP.Net Core 中使用 MediatR
MediatR 是一个 中介者模式 的.NET开源实现, 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖,在 中介者模式 中,一个对象不需要直接和另一个对象进行通讯, ...
- 如何在 ASP.Net Core 中对接 WCF
在 REST API 出现之前,SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议,虽然现在 REST 大行其道,但在平时开发中总会遇到对接第三 ...
- 如何在 ASP.Net Core 中使用 NCache
虽然 ASP.Net Core 中缺少 Cache 对象,但它引入了三种不同的cache方式. 内存缓存 分布式缓存 Response缓存 Alachisoft 公司提供了一个开源项目 NCache, ...
- 如何在 ASP.Net Core 中使用 Configuration Provider
ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配 ...
- 如何在 ASP.NET Core 中使用 URL Rewriting 中间件
URL rewriting 是根据预先配置好的一组规则去修改 request url,值得注意的是:URL Rewriting 的重写功能和 url 重定向 是两个概念,本篇我们就来讨论下如何在 AS ...
最新文章
- 模拟撞击_研究人员打造出能让橄榄球头盔承受住反复撞击的液态纳米泡沫
- js简单手动(自动)切换
- 王式安概率论与数理统计基础课手写笔记-第一章概率与事件-第二章随机变量及其分布
- anemometer mysql_MySQL慢日志简介及Anemometer工具介绍 | | For DBA
- List集合、常用数据结构基本了解
- 现在电脑的主流配置_玩手游是因为电脑配置差?现在来告诉你这些网游需要啥配置...
- 解决winxp网上邻居共享问题的方法
- scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容
- java类spring加载_spring的加载机制?
- mysql 读取properties_JDBC中使用Properties读取配置文件有什么用
- 倒计时按钮_办公小技巧:轻松玩转PPT秒针倒计时
- java区块作用域_ES6-let、const和块级作用域
- Android开发之 shape的使用
- fiddler启用过滤规则只显示想要的接口数据
- mariadb配置允许远程访问方式
- Shader预处理宏、内置状态变量、多版本编译等
- 分析咪蒙1013篇文章,300多万字,她凭什么会火?
- CSS控制多行文本省略--显示省略号
- linux uart应用开发(ttyS*设备)
- 去除IDEA中代码的波浪线(黄色警示线)
热门文章
- git推送本地分支到远程分支
- 码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable...
- Redis安装[Windows]
- 复制一个文件夹中的所有文件和文件夹的java程序实现
- 在ie6下实现position-fixed的效果--------续集---对联效果(02)
- Teams与OneDrive for Business和SharePoint的关系
- vnc数量限制_通过限制视觉效果在Vista上加速VNC
- kompozer如何启动_使用KompoZer创建网站
- chrome自动退出的原因_Chrome 70将让用户选择退出新的自动登录功能
- winform 线程监听两个目录下的文件_vb.net 利用.net自带的GZipStream压缩或者解压文件的代码,不需要任何第三方控件...