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();
            }
        }
    }
}
相关推荐
RemainderTime19 小时前
Spring Boot脚手架集成Sa-Token实现生产级RBAC权限管理
java·spring boot·后端·系统架构
llz_1121 天前
web-第二次课后作业
前端·后端·web
红尘散仙1 天前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记1 天前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆1 天前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪1 天前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6161 天前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364571 天前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao1 天前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒1 天前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端