手把手教你AspNetCore WebApi:Serilog
前言小明目前已经把“待办事项”功能实现了 , API文档也搞定了 , 但是马老板说过 , 绝对不能让没有任何监控的项目上线的 。
Serilog是什么?在.NET使用日志框架第一时间会想到NLog或是Log4Net , Serilog 是这几年快速崛起的Log框架之一 , Serilog是以Structured logging 为基础进行设计 , 透过logging API 可以轻松的记录应用程式中对象属性 , 方便快速进行logging 内容进行查询与分析 , 并将其记录内容透过json (可指定) 的方式输出 。
使用首先 , 将Serilog.AspNetCore NuGet软件包安装到您的应用程序中 。
dotnet add package Serilog.AspNetCore
接下来 , 在应用程序的Program.cs文件中 , 首先配置Serilog 。
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("启动主机");CreateHostBuilder(args).Build().Run();}catch (Exception ex){Log.Fatal(ex, "主机意外终止");}finally{Log.CloseAndFlush();}}
然后 , 添加UseSerilog()到中的通用主机CreateHostBuilder() 。
public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).UseSerilog() // <-添加此行.ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup();});
然后 , 通过删除默认记录器的其余配置进行清理:
- "Logging"从appsettings.json文件中删除此部分
文章插图
在控制器使用首先.NETCore通过继承 ILogger接口实现了它自己的日志记录 。 通过借助依赖注入机制 , 它可以很容易地使用 。
private readonly TodoContext context;private readonly ILogger logger; // <-添加此行public TodosController(TodoContext context, ILogger logger){this.context = context ?? throw new ArgumentNullException(nameof(context));this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); // <-添加此行}/// /// 获取所有待办事项/// /// [HttpGet]public async Task>> GetTodo(){logger.LogInformation("启动{ActionName}", "获取所有待办事项"); // <-添加此行var todos = await context.Todo.ToListAsync();return todos;}
测试GetTodo接口 , 再次查看以下效果:文章插图
输出到文件在原来的输出到控制台的基础上增加.WriteTo.File(@"C:\LogFiles\log.txt")就可以了 。
Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().MinimumLevel.Override("Microsoft", LogEventLevel.Information).Enrich.FromLogContext().WriteTo.Console().WriteTo.File(@"C:\LogFiles\log.txt").CreateLogger();
再次查看以下效果:文章插图
使用配置文件更改appsettings.json内容:
"Serilog": {"MinimumLevel": {"Default": "Information","Override": {"Microsoft": "Warning","System": "Warning"}},"WriteTo": [{ "Name": "Console" },{"Name": "File","Args": { "path": "C:\\LogFiles\\log.txt" }}],"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]},
- 教你做一个微信敲门(扫码通知)效果
- 手把手教你挑选大大大大屏的投影仪
- 手把手教你用python编程写一款自己的音乐下载器
- 安全漏洞大揭秘:手把手教你轻松防止SQL注入
- 教你一招,微信设置一下,别人一碰就闪退
- 今天才知道,原来手机就能给视频添加字幕,手把手教会你
- 扔掉传统公交卡,教你把手机变成地铁优惠卡,享受打折换乘优惠
- 还在为被看见聊天记录而烦恼吗?,教你彻底清空聊天记录
- 教你快速入门:Python Logging 使用指南
- 不管是什么手机,教你这样设置,瞬间提升网速,手机流畅不卡