手把手教你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();});
【手把手教你AspNetCore WebApi:Serilog】然后 , 通过删除默认记录器的其余配置进行清理:
- "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" ]},
更改Program类 , 使用ReadFrom.Configuration()并传递一个IConfiguration对象 。public static IConfiguration Configuration { get; } = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true).AddEnvironmentVariables().Build();public static void Main(string[] args){Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration).Enrich.FromLogContext().CreateLogger();try{Log.Information("启动主机");CreateHostBuilder(args).Build().Run();}catch (Exception ex){Log.Fatal(ex, "主机意外终止");}finally{Log.CloseAndFlush();}}
小结目前为止 , 小明把日志记录也搞定了 , 摸了摸光滑的脑袋 , 对于优秀青年小明来说添加日志按时so easy!当然Serilog可不是这么简单 , 还有很多功能留给其他小伙伴们去发掘 。- 交易|什么时候买手机最便宜?内行人教你这样省钱
- 原创|别花冤枉钱,我教你怎么样给电脑装系统,安装版与Ghost都不难!
- 月亮|还不会用手机专业模式?我来教你!
- 量度|从0开始教你做CRM「3」:如何构建客户画像?
- 微信|如何下载微信视频号的视频?教你三种方法,一分钟轻松搞定!
- 评测|电脑多开微信很难?这里教你一键式操作
- 扣钱|App总是悄悄扣钱?教你一招快速解决,永绝后患
- |一个方法教你大幅度提升外卖门店的下单率!
- 硬盘|电脑有开机密码,如何能在不破坏原密码的方式下查看?我来教你!
- 显卡|电脑突然使用就不开机了,不一定要送去维修店,教你自助维修!