Serilog + SQL Server 动态分表记录日志

Serilog + SQL Server 分表记录日志

  • Serilog + SQL Server 动态分表记录日志
    • 依赖包
      • 安装依赖包
    • 配置 appsettings.json
    • 配置 Program.cs

Serilog + SQL Server 动态分表记录日志

当日志量巨大达到百万千万级时,为了便于查询日志,可以用 Serilog 动态将日志分表存储记录。

依赖包

  • Serilog.AspNetCore, 6.0.1
  • Serilog.Sinks.Map, 1.0.2
  • Serilog.Sinks.MSSqlServer, 5.8.0

安装依赖包

Install-Package Serilog.AspNetCore
Install-Package Serilog.Sinks.Map
Install-Package Serilog.Sinks.MSSqlServer

配置 appsettings.json

{
  "ConnectionStrings": {
    "Default": "Server=.;Database=DB;User ID=sa;Password=123;", //默认数据库连接字符串
  },
  "Serilog": {
    "MinimumLevel": "Information" //日志输出最小级别
  }
}

配置 Program.cs

var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json")
    .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true)
    .Build(); //读取配置文件

var connectionString = configuration["ConnectionStrings:Default"].Trim(); //获取默认的数据库连接字符串

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration) //读取配置文件中的配置
    .WriteTo.Console(theme: AnsiConsoleTheme.Code) //写入控制台输出,且使用 AnsiConsoleTheme.Code 主题
    .WriteTo.Map( //动态配置
        keyPropertyName: "Name", //键属性名
        defaultKey: "0", //默认键值
        configure: (name, wt) => wt.Logger(lc => lc //配置单个log
            .WriteTo.MSSqlServer( //写入MSSQL
                connectionString: connectionString, //使用默认的数据库连接字符串
                sinkOptions: new MSSqlServerSinkOptions
                {
                    TableName = $"LogEvents_{name}", //动态表名
                    AutoCreateSqlTable = true //自动创建表
                })))
    .CreateLogger(); //创建log

Log.Information("Host created."); //使用默认键值输出日志到数据库,表名为 LogEvents_0
Log.ForContext("Name", "1").Information("1"); //使用动态键值输出日志到数据库,表名为 LogEvents_1

你可能感兴趣的:(C#,.net,sqlserver,serilog,分表,日志)