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
            }
        }
    }
posted @   ꧁执笔小白꧂  阅读(144)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理 了,记录一下
点击右上角即可分享
微信分享提示