如何为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
相关产品推荐
相关产品推荐

