You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Serilog MySQL日志表添加自定义列?

为Serilog MySQL日志表添加自定义列的解决方案

步骤1:在MySQL日志表中添加自定义列

先手动修改logs表结构,添加你需要的自定义列,比如要加ApplicationName(字符串类型)和UserId(整数类型):

ALTER TABLE logs ADD COLUMN ApplicationName VARCHAR(100) NULL;
ALTER TABLE logs ADD COLUMN UserId INT NULL;

如果是新建表,直接在CREATE TABLE语句中包含这些自定义列即可。

步骤2:配置Serilog的MySQL Sink映射自定义列

通过columnOptions参数配置自定义列的映射规则,以Serilog.Sinks.MySQL包为例,修改你的日志初始化代码:

var columnOptions = new MySqlColumnOptions
{
    AdditionalColumns = new List<SqlColumn>
    {
        new SqlColumn { ColumnName = "ApplicationName", DataType = MySqlDbType.VarChar, DataLength = 100 },
        new SqlColumn { ColumnName = "UserId", DataType = MySqlDbType.Int32 }
    }
};

var log = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File("logs/log.txt")
    .WriteTo.MySQL(
        connectionString: builder.Configuration.GetConnectionString("MySqlServer"),
        tableName: "logs",
        columnOptions: columnOptions)
    .CreateLogger();

步骤3:写入日志时携带自定义属性

写日志时通过结构化日志或ForContext传递自定义属性,Serilog会自动将属性值映射到对应的数据库列:

// 单个自定义属性
log.ForContext("ApplicationName", "MyDotNetApp").Information("用户登录成功");

// 多个自定义属性
log.Information("用户{UserName}执行了操作,用户ID:{UserId}", "张三", 123);

注意事项

  • 确保使用的Serilog MySQL Sink包版本支持自定义列(如Serilog.Sinks.MySQL或Serilog.Sinks.MySqlServer的最新稳定版),旧版本可能无此功能。
  • 自定义列的DataType需与MySQL表列类型对应,比如MySqlDbType.VarChar对应数据库的VARCHAR,MySqlDbType.Int32对应INT。
  • 若需自动建表,可将AutoCreateSqlTable参数设为true,同时在columnOptions中定义所有列(默认列+自定义列),Sink会自动创建包含自定义列的表。

内容的提问来源于stack exchange,提问作者fako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:33:09