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

cs 复制代码
"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)"日志记录器,来记录程序启动过程中发生的异常日志。

cs 复制代码
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配置来替换引导日志记录器。

cs 复制代码
builder.Services.AddSerilog((services, lc) => 
lc.ReadFrom.Configuration(builder.Configuration));

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

cs 复制代码
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

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();
            }
        }
    }
}
相关推荐
熊小猿9 小时前
在 Spring Boot 项目中使用分页插件的两种常见方式
java·spring boot·后端
paopaokaka_luck9 小时前
基于SpringBoot+Vue的助农扶贫平台(AI问答、WebSocket实时聊天、快递物流API、协同过滤算法、Echarts图形化分析、分享链接到微博)
java·vue.js·spring boot·后端·websocket·spring
小蒜学长10 小时前
springboot酒店客房管理系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
橙子家10 小时前
Serilog 日志库简单实践(一):文件系统 Sinks(.net8)
后端
Yeats_Liao11 小时前
Go Web 编程快速入门 13 - 部署与运维:Docker容器化、Kubernetes编排与CI/CD
运维·前端·后端·golang
Yeats_Liao11 小时前
Go Web 编程快速入门 14 - 性能优化与最佳实践:Go应用性能分析、内存管理、并发编程最佳实践
前端·后端·性能优化·golang
七夜zippoe12 小时前
仓颉语言核心特性深度解析——现代编程范式的集大成者
开发语言·后端·鸿蒙·鸿蒙系统·仓颉
软件架构师-叶秋12 小时前
spring boot入门篇之开发环境搭建
java·spring boot·后端
QX_hao13 小时前
【Go】--接口(interface)
开发语言·后端·golang
superman超哥14 小时前
仓颉语言中正则表达式引擎的深度剖析与实践
开发语言·后端·仓颉