ASP.NETCore-Logging(一)_全局异常+Serilog_Net7
1、安装NuGet包(必需包为Serilog.AspNetCore)
2、appsettings.json中配置Serilog功能
{
"Serilog": { // Serilog日志配置文件
"Properties": { // 非必须
"Application": "fly_chat1_net7" // 程序名
},
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": { // 等同于.MinimumLevel.Error()
"Default": "Error",
"Override": {
"Microsoft": "Error"
}
},
"WriteTo": [ // 等同于.WriteTo.Console()与.WriteTo.File(...)
{ "Name": "Console" },
{
"Name": "File",
"Args": { "path": "Logs/log.txt" }
}
],
"Enrich": "FromLogContext" // 等同于.Enrich.FromLogContext()
//"Destructure": [ // 等同于.Destructure()
// {
// "Name": "With",
// "Args": { "policy": "Sample.CustomPolicy, Sample" }
// },
// {
// "Name": "ToMaximumDepth",
// "Args": { "maximumDestructuringDepth": 4 }
// },
// {
// "Name": "ToMaximumStringLength",
// "Args": { "maximumStringLength": 100 }
// },
// {
// "Name": "ToMaximumCollectionCount",
// "Args": { "maximumCollectionCount": 10 }
// }
//]
}
}
3、Program.cs中使用Serilog
public class Program
{
public static void Main(string[] args)
{
// try前也可能报错,但是错误是可控的。实际项目中使用时可以再加个try,只记录日志到文件中。
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) // 设置“configuration”的查找目录为程序目录
.AddJsonFile("appsettings.json") // 设置“configuration”的读取文件
.Build(); // 获取配置
#region 日志配置
#region 设置Serilog配置
Log.Logger = new LoggerConfiguration() // 设置Serilog配置
#region 旧的配置方法
//.MinimumLevel.Error() // 记录级别为Error以上
//.WriteTo.Console() // 启用Console控制台
//.WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day) // 启用文件记录,文件格式yyyyMMdd.txt
//.Filter // 本节定义将应用于日志事件的筛选器
//.Enrich.FromLogContext() // 定义了将丰富日志事件的键值对的静态列表
//.Destructure() // 如果参数类型是接口或抽象类,则需要指定实现抽象类型的完整类型名称。实现类型应具有无参数构造函数。
//.AuditTo // (我没用到)
#endregion 旧的配置方法
.ReadFrom.Configuration(configuration) // 从配置文件中读取Serilog配置
.CreateLogger();
#endregion 设置Serilog配置
#endregion 日志配置
try
{
var builder = WebApplication.CreateBuilder(args);
#region 日志中间件Logging + Serilog
builder.Host.UseSerilog(); // 启用第三方日志Serilog记录日志;将Logging重定向到Serilog
//Log.Information("Starting up"); // Serilog
#endregion 日志中间件Logging + Serilog
#region 容器Services
builder.Services.AddControllers(); // 添加Controller
...
#endregion 容器Services
var app = builder.Build();
...
app.UseAuthorization();
app.MapControllers();
app.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Web应用程序意外终止"); // Serilog
}
finally
{
Log.CloseAndFlush(); // Serilog
}
}
}
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/articles/17432960.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下