天津储鑫盛钢材现货供应商 发表于 2025-11-5 00:28:14

使用 Serilog 在 .NET Core 6.0 中日志纪录

在本文中,我们将讨论日志纪录的根本知识以及在 .NET Core 6 中使用 Serilog 的徐徐实现。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvZTI0ZTA5OWJiMmRhNDQ1ZmE0MDc2YTU5NjBmMTJiZjYucG5n
先决条件

1、Visual Studio 2022。
2、C# 和 .NET Core 的根本知识。
3、.NET Core 6 SDK。 
日志纪录根本知识

    从技能角度来说,日志纪录是纪录变乱并捕捉应用步调在运行过程中天生的其他信息的过程。它在软件开辟的各个方面都发挥着至关告急的作用,包罗:
    调试-Debugging :日志为清除错误和辨认题目根源提供了有代价的信息。
    监控-Monitoring:日志有助于跟踪应用步调的康健状态、性能和用户运动。
    审计-Auditing:日志可用于生存特定操纵和更改的纪录,以到达安全性和合规性目的。
以下是日志纪录根本知识的细分:
1. 日志条目:
每个日志条目通常包罗以下内容:
    时间戳:体现变乱发生的时间。
    日志级别:对变乱的严峻程度举行分类(比方,调试、信息、告诫、错误、严峻)。
    消息:详细形貌变乱。
    上下文信息:与变乱相干的可选数据(比方,用户 ID、哀求详细信息)。
2.日志级别:
大多数日志纪录框架使用日志级别条理结构,答应您过滤和确定纪录信息的优先级:
    调试:深度调试的详细信息(通常在生产中禁用)。
    信息:有关应用步调正常运行的信息消息。
    告诫:大概表明存在潜伏题目但不愿定会导致错误的变乱。
    错误:导致应用步调发生故障或碰到不测状态的变乱。
    严峻:须要立刻关注的变乱,大概会导致严峻题目。
3. 日志目的地:
日志可以写入各种目的地以用于差别目的:
    文件:存储恒久日志以供日后分析的常见选择。
    控制台:对于开辟或故障清除期间的实时观察很有用。
    数据库:支持将日志与其他应用步调数据一起存储。
    网络套接字:答应将日志发送到会集式服务器举行汇总和分析。
4.选择日志框架:
大多数编程语言都有内置的日志库或盛行的第三方选项。这些框架提供:
    结构化日志:将日志存储为键值对,以便于分析。
    机动的 API:提供各种方法用于差别级别的纪录和添加上下文。
.NET Core 中的 Serilog

    Serilog 是一个实用于 .NET 应用步调的当代结构化日志纪录框架。它提供了一种机动而强盛的方法来捕捉和存储日志数据,使开辟职员可以大概轻松地清除故障、监控和分析应用步调活动。
Serilog 对 C# 开辟职员有几个长处,包罗:
    1、设置简单
    2、机动的
    3、支持结构化日志纪录
什么是 Serilog Sinks?

    Serilog 中的吸收器是日志目的(即,它们是您想要发送日志的目的地)。一些盛行的吸收器是文件和控制台目的。Serilog 吸收器是您的日志的目的地。这可以是文件、数据库、云服务等。
任何可以存储日志数据的东西都可以用作 Serilog 吸收器。Serilog 附带很多内置吸收器,但您也可以创建本身的自界说吸收器。如许您就可以将日志数据发送到您想要的任何目的地。
步调1:-
    在您的办理方案中安装Serilog.AspNetCore包。此包提供 Serilog 和 ASP.NET Core 之间须要的集成。
步调2:
    Serilog 的设置:在 ASP.NET Core 中设置 Serilog 重要有两种方法:
a)使用appsettings.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" ],
    "Properties": {
      "Application": "WeatherForecast"
    }
  }
}
表明:
Using:在本节中,我们须要指定要使用的吸收器范例。(比方:控制台和文件)
Minimum Level:通过此部分,我们可以设置最低日志级别和信息级别。
WriteTo:在此部分中,我们可以设置吸收器。在此示例中,我们同时使用控制台和文件来写入日志,并举行了一些额外的设置。
Enrich:使用此部分,我们可以为日志变乱添加额外的上下文。
Properties:答应我们向日志变乱添加自界说属性。
b) 在 Program.cs 中使用 Lambda 表达式:
    留意:-(简单来说,当您注入 Serilog 服务时)
public static async Task Main(string[] args)
{
    var builder = WebApplication.CreateBuilder(args);
    builder.Host.UseSerilog((context, config) =>
    {
        config.MinimumLevel.Information()
              .WriteTo.Console()
              .WriteTo.File("log.txt");
    });
    // Rest of your application configuration code...
}
        此方法使用 lambda 表达式来明白设置 Serilog。它将最低日志级别设置为“信息”,并将日志写入控制台和名为“log.txt”的文件。
步调3:
使用应用步调设置设置注册所需的 Serilog 服务并在管道中添加中央件。
    留意:-(如果您使用 Lambda 表达式设置 Serilog,请省略此步调,由于这两者都会在该步调中出现)
// Add namespace
using Serilog;
// Add serilog services to the container and read config from appsettings
builder.Host.UseSerilog((context, configuration) =>
    configuration.ReadFrom.Configuration(context.Configuration));
// Configure Serilog for logging (middleware)
app.UseSerilogRequestLogging();
步调4:
设置 Serilog 后,您可以将ILogger<T>接口注入到您的类中并使用其方法来纪录消息:
    留意:- 您也可以使用 Serilog 的方法。我使用的是默认的 ILogger 接口。
public class MyService
{
    private readonly ILogger<MyService> _logger;
    public MyService(ILogger<MyService> logger)
    {
        _logger = logger;
    }
    public void DoSomething()
    {
        _logger.Information("Starting operation...");
        // Your code goes here
        _logger.Debug("Operation completed successfully.");
    }
}
T用您的种别的范例举行更换以获取特定于该种别的纪录器。
根据变乱的严峻性和日志消息详细信息调用恰当的日志纪录方法(Debug、Information、Warning、Error等)。  
附加信息:-
"WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "Logs/.txt",
          "rollOnFileSizeLimit": true,
          "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter,Serilog.Formatting.Compact",
          "rollingInterval": "Day",
          "outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Properties}{Exception}"
        }
      }
我们可以添加一些额外的设置,比方:-
rollOnFileSizeLimit是Serilog.Sinks.File吸收器中使用的设置选项,用于根据日志文件的巨细控制滚动日志文件的活动。以下是其功能的细分:(默认值rollOnFileSizeLimit通常为 1 GB(1073741824 字节)。
    1、防止日志文件无穷增长,大概导致性能题目或磁盘空间耗尽。
    2、一旦当前日志文件到达指定的巨细限定:
    3、Serilog 会主动创建一个带有递增后缀的新日志文件(比方“log.txt”、“log_00001.txt”、“log_00002.txt”等等)。
rollingInterval是一个选项,界说日志文件滚动的频率(关闭并创建一个新的文件)。
    该隔断可以设置为差别的单位,如Hour、Minute、Day等等。
formatter是一个关键组件,它界说怎样将日志变乱转换为人类可读或呆板可读的格式以供存储或体现。Serilog 提供各种内置格式化步调,并支持创建自界说格式化步调以满意您的特定需求。
JsonFormatter
CompactJsonFormatter
RenderedCompactJsonFormatter
Literate Formatter
Exception Formatter
outputTemplate是一个强盛的设置选项,可让您界说日志消息简直切结构和内容。它本质上是一个字符串格式模板,雷同于字符串插值中使用的模板,但专门针对 Serilog 量身定制。
占位符:
    1、@{propertyName}:指日志变乱中界说的特定属性。
    2、内置属性:无需使用@符号即可使用(比方,Timestamp,Level,Message,Exception)。
    3、自界说属性:使用雷同方法添加到您的日志变乱中Log.Information("Processed {Count} items", count)。
如果您喜欢此文章,请收藏、点赞、批评,谢谢,祝您快乐每一天。 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 使用 Serilog 在 .NET Core 6.0 中日志纪录