当前位置: 首页 > 工具软件 > Serilog > 使用案例 >

Serilog安装配置

谢鸿
2023-12-01

一.Serilog描述

Serilog 是一个用于记录日志的 .NET 库,它提供了一种简单、易于使用和灵活的方法来记录系统和应用程序的事件。以下是 Serilog 的一些特性:

  1. 灵活的输出格式:Serilog 允许您指定记录日志的输出格式,可以选择支持的文件(如文本、XML 或 JSON)或目标存储区(如控制台或 SQL 数据库)。
  2. 强大的筛选和过滤功能:通过 Serilog 配置文件,可以使用各种筛选器对日志事件进行条件筛选,并将其发送到不同的目标配置。
  3. 支持结构化日志:Serilog 可以记录结构化日志,这意味着每个日志消息背后都有一个键值对集合和序列化信息,使得日志更好地进行分析和查询。
  4. 易于扩展:Serilog 可以与其他 .NET 库(如 Entity Framework Core 和 ASP.NET Core)无缝集成,还支持第三方插件扩展。

总体来说,Serilog 提供了一个功能强大、灵活并且容易使用的方式,来记录应用程序中产生的各种事件和日志信息。 如果您在开发 .NET 应用程序时需要记录日志,请考虑使用 Serilog

二.配置安装

Serilog 的配置包括两个步骤:安装 Serilog 包和配置日志输出。以下是一个简单的 Serilog 配置示例:

首先,您需要通过 NuGet 包管理器或命令行将 Serilog 包添加到项目中:

// 安装
Install-Package Serilog

接下来,在程序启动时进行 Serilog 配置。通常情况下,这可以在 Program.cs 文件中完成。下面是一个基本的 Serilog 配置,将日志信息输出到控制台:

using Serilog;
using Serilog.Events;

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateLogger();

        try
        {
            Log.Information("Starting application.");
            // 执行应用程序代码
        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Application terminated unexpectedly!");
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }
}

以上配置使用 Serilog 对日志记录器进行配置,并指定了最小记录级别(此处为 Debug),将日志发送给控制台,添加了上下文记录处理器。

这是一个非常基本的 Serilog 配置示例,您可以根据需要进行调整。例如,您可以将日志输出到不同的目标、格式化其输出或对日志事件进行筛选、格式化。

三.数据库配置

如果您想将 Serilog 日志输出到数据库,可以使用 Serilog.Sinks.MSSqlServer 包。 以下是一个将 Serilog 输出到数据库的配置示例:

首先,安装 Serilog 和 Serilog.Sinks.MSSqlServer 包:

Install-Package Serilog
Install-Package Serilog.Sinks.MSSqlServer

在 appsettings.json 文件中添加数据库连接字符串和其他 Serilog 配置选项:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Information"
      }
    },
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "Server=.;Database=MyDb;Integrated Security=True",
          "tableName": "Logs",
          "autoCreateSqlTable": true
        }
      }
    ]
  }
}

此示例指定了数据库连接字符串,并将日志消息记录在名为 Logs 的表格中。

在应用程序启动时,使用 Serilog 将配置读取到全局日志记录器中:

using Microsoft.Extensions.Configuration;
using Serilog;

public class Program
{
   public static void Main(string[] args)
   {
       var configuration = new ConfigurationBuilder()
           .AddJsonFile("appsettings.json")
           .Build();

       Log.Logger = new LoggerConfiguration()
           .ReadFrom.Configuration(configuration)
           .CreateLogger();

       try
       {
           Log.Information("Starting application.");
           // 执行应用程序代码
       }
       catch (Exception ex)
       {
           Log.Fatal(ex, "Application terminated unexpectedly!");
       }
       finally
       {
           Log.CloseAndFlush();
       }
   }
}

以上代码通过读取 appsettings.json 配置文件中的配置,将 Serilog 日志写入到 MSSQL 数据库。

请注意,此处的示例仅适用于 MSSQL 数据库。如果您要使用其他类型的数据库,请相应地更改配置选项。

数据库字段

数据库日志表通常包含一些标准字段,这些字段可以帮助您了解系统和应用程序发生的事件。以下是一些常见的数据库日志字段列表:

Id: 日志记录的唯一标识符或主键。

LogLevel: 消息的记录级别,例如 Debug、Information、Warning 等等。

Message: 记录的消息文本。

Exception: 如果记录了异常或错误,则包含引发异常的详细信息。

Timestamp:记录消息的时间戳。

MachineName: 记录消息的计算机名称或 IP 地址。

Logger: 记录消息的日志记录器名称。

CorrelationId: 追踪应用程序中相关操作的唯一标识。

UserName: 执行操作的用户名称。

ClientIp: 来源客户端的 IP 地址。

RequestUri: 请求的地址。

Method: HTTP 请求方法类型。

StatusCode: HTTP 请求返回码。

ResponseTimeMs: 请求响应时间(以毫秒为单位)。

这些字段并不是固定的、一成不变的,它们可能会根据你的具体使用情况和数据库需求而不同。 当您将 Serilog 输出到数据库时,您可以通过配置 Serilog.Sinks.MSSqlServer 包来自定义数据库表格列及其名称。

 类似资料: