手把手教你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文件中删除此部分
最后 , 调试启动vs , 可以查看以下效果:
手把手教你AspNetCore WebApi:Serilog文章插图
在控制器使用首先.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接口 , 再次查看以下效果:
手把手教你AspNetCore WebApi:Serilog文章插图
输出到文件在原来的输出到控制台的基础上增加.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();再次查看以下效果:
手把手教你AspNetCore WebApi:Serilog文章插图
使用配置文件更改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" ]},