当前位置: 首页 > news >正文

ASP.NET Core 8 轻松配置Serilog日志

与许多其他 .NET 库一样,Serilog 提供了将诊断日志输出到文件、控制台以及其他位置的功能。它易于设置,拥有简洁的 API,并且可以在最新的 .NET 平台之间进行移植。

官方网站:Serilog — simple .NET logging with fully-structured events

1、安装Serilog

dotnet add package Serilog.AspNetCore

2、将Serilog配置信息添加到appsettings.json

在ASP .NET Core后端服务开发中,任何可配置的项我们都应该配置在appsettings.json文件中。

相关配置信息可查看网站:https://github.com/serilog/serilog-settings-configuration

"Serilog": {"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],"MinimumLevel": {"Default": "Information","Override": {"Microsoft": "Warning","System": "Warning"}},"WriteTo": [{"Name": "Console"},{"Name": "File","Args": {"path": "logs\\log.txt","rollingInterval": "Day"}}],"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]}

3、在Program.cs 文件中使用两阶段初始化方式配置Serilog

为了完全捕获程序启动过程中和启动完成后,所有异常日志信息。

第一步:CreateBootstrapLogger()

程序启动时会立即配置一个初始的“引导(bootstrap)”日志记录器,来记录程序启动过程中发生的异常日志。

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("logs\\log.txt", rollingInterval: RollingInterval.Day)
.CreateBootstrapLogger();

第二步:AddSerilog()

当程序加载完成后,使用appsettings.json文件中Serilog配置来替换引导日志记录器。

builder.Services.AddSerilog((services, lc) => 
lc.ReadFrom.Configuration(builder.Configuration));

4、添加Serilog请求日志记录中间件

app.UseSerilogRequestLogging();

5、完整代码

appsetting.json

{"Serilog": {"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],"MinimumLevel": {"Default": "Information","Override": {"Microsoft": "Warning","System": "Warning"}},"WriteTo": [{"Name": "Console"},{"Name": "File","Args": {"path": "logs\\log.txt","rollingInterval": "Day"}}],"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]}
}

Program.cs


using Serilog;
using Serilog.Events;namespace Common.Backend.WebApi
{public class Program{public static void Main(string[] args){Log.Logger = new LoggerConfiguration().MinimumLevel.Override("Microsoft", LogEventLevel.Information).Enrich.FromLogContext().WriteTo.Console().WriteTo.File("logs\\log.txt", rollingInterval: RollingInterval.Day).CreateBootstrapLogger();try{var builder = WebApplication.CreateBuilder(args);builder.Services.AddSerilog((services, lc) => lc.ReadFrom.Configuration(builder.Configuration));var app = builder.Build();app.UseSerilogRequestLogging();app.Run();}catch(Exception ex){Log.Fatal(ex, "Application terminated unexpectedly");}finally{Log.CloseAndFlush();}}}
}

http://www.dtcms.com/a/270958.html

相关文章:

  • 智慧码头船舶网络部署5G工业路由器无人值守场景应用
  • 无人设备遥控器之双向通讯技术篇
  • 【机器人】Aether 多任务世界模型 | 4D动态重建 | 视频预测 | 视觉规划
  • C++并发编程-11. C++ 原子操作和内存模型
  • Linux驱动学习day20(pinctrl子系统驱动大全)
  • Ubuntu防火墙缺失问题(unit firewalld.service could not be found, ubuntu 22)
  • EFK9.0.3 windows搭建
  • Linux系统管理实战:生成大文件与定位磁盘挂载点
  • 专题:2025母婴行业洞察报告|附60+份报告PDF汇总下载
  • Linux中shell(外壳)和内核(kernel)的关系
  • Claude Code:终端上的 AI 编码助手,潜力与挑战并存
  • 从零用java实现 小红书 springboot vue uniapp(13)模仿抖音视频切换
  • 华为数通HCIA vs HCIP:新手入门选哪个更合适?
  • 利用sCMOS科学相机测量激光散射强度
  • Rk3568驱动开发_阻塞IO_15
  • SQL Server通过存储过程实现飞书消息卡片推送
  • Live555-RTSP服务器
  • nl2sql的解药pipe syntax
  • 【工具变量】上市公司企业金融强监管数据、资管新规数据(2001-2024年)
  • 【YOLOv11-目标检测】目标检测数据格式(官方说明)
  • S7-200 SMART :通过以太网下载程序详细步骤
  • React、Vue、Angular的性能优化与源码解析概述
  • Qt6中模态与非模态对话框区别
  • 供应链管理-采购:谈判方式、理念、技巧
  • DolphinScheduler 3.2.0 Worker启动核心源码解析
  • 一天一道Sql题(day05)
  • IntelliJ IDEA 2025.1.3创建不了java8的项目
  • 初识MySQL(三)之主从配置与读写分离实战
  • Mac电脑,休眠以后,发现电量一直在减少,而且一个晚上,基本上是没了,开机都需要插电源的简单处理
  • Hive MetaStore的实现和优化