.net6 core serilog mysql配置自定义列

Serilog是.NET Core中现在流行的结构化日志类库,支持MSSQL、Mysql、SQLLite等多种数据库,配置简单,支持输出文本、数据库、缓存等。

在输出到数据库时,若连接MSSQL想配置自定义列,可以很容易的用ColumnOptions进行自定义列扩展,如

var columnOpts = new ColumnOptions();
        //columnOpts.Store.Remove(StandardColumn.Properties);
        //columnOpts.Store.Add(StandardColumn.LogEvent);
        //columnOpts.LogEvent.DataLength = 2048;
        //columnOpts.PrimaryKey = columnOpts.TimeStamp;
        //columnOpts.TimeStamp.NonClusteredIndex = true;
        columnOpts.Store.Remove(StandardColumn.MessageTemplate);
        columnOpts.Properties.ExcludeAdditionalProperties = true;
        columnOpts.AdditionalColumns = new Collection<SqlColumn>
        {
            new SqlColumn{DataType = System.Data.SqlDbType.NVarChar, DataLength = 32, ColumnName = "IP"}
        };

在program.cs配置

builder.Host.UseSerilog((context, logger) =>
{
    logger.WriteTo.MSSqlServer(
                connectionString: logDB,
                sinkOptions: sinkOpts,
                columnOptions: columnOpts
                );
};

但是如果连接的是mysql数据库,不能直接的用.WriteTo.Mysql配置,需要通过Serilog.Sinks.MariaDB进行连接。

//引用

using Serilog.Sinks.MariaDB;

using Serilog.Sinks.MariaDB.Extensions;

 在program.cs这样注册

builder.Host.UseSerilog((context, logger) =>//注册Serilog
{
    logger.ReadFrom.Configuration(context.Configuration);
    logger.Enrich.FromLogContext();// 注册日志上下文//.Enrich.WithProperty("IP", "8.8.8.8")
    logger.WriteTo.MariaDB(
        connectionString: builder.Configuration.GetConnectionString("ConnStr"),
        tableName: "Logs",
        autoCreateTable: true,
        options: new MariaDBSinkOptions()
    );
});

同时需要在appsettings.json进行自定义列的配置

"WriteTo": [
  {
    "Name": "MariaDB",
    "Args": {
      "autoCreateTable": true, //自动创建表
      "tableName": "Logs",
      "restrictedToMinimumLevel": "Debug",
      //"batchPostingLimit": 1000,
      //"period": "0.00:00:30",
      "options": {
        "PropertiesToColumnsMapping": {
          "Timestamp": "Timestamp",
          "Ts": "Ts",//自定义
          "Level": "Level",
          "ActionName": "ActionName",//自定义
          "RequestPath": "RequestPath",//自定义
          "IP": "IP",//自定义
          "Param": "Param",
          "Message": "Message",
          "Exception": "Exception",
          "User": "User",//自定义
          "MessageTemplate": "MessageTemplate",
          "Properties": "Properties"
        },
        "TimestampInUtc": false, //Timestamp列是否为UTC时间
        //"ExcludePropertiesWithDedicatedColumn": true,/
      }
    }
  }
]

PropertiesToColumnsMapping就是可以在默认的log列之外,添加自定义列。autoCreateTable配置为true会自动创建log表。

另外,要对自定义列进行赋值,需要使用using()格式,如

using (LogContext.PushProperty("ActionName", "{ActionName}"))
using (LogContext.PushProperty("RequestPath", "{RequestPath}"))
using (LogContext.PushProperty("IP", context.HttpContext.Request.Host.Value))
using (LogContext.PushProperty("Param", JsonConvert.SerializeObject(context.ActionArguments)))
{
    _logger.LogInformation(JsonConvert.SerializeObject(response));
}

·{ActionName}:执行方法名称

·{RequestPath}:请求路径

·context.HttpContext.Request.Host.Value:请求IP

·context.ActionArguments:请求参数

这样,就可以对mysql的log表进行自定义列的配置啦

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值