如何配置Serilog MSSqlServer Sink以使用GUID类型的Id列?
修改Serilog数据库日志主键为GUID(uniqueidentifier)类型
要把Serilog默认的自增Id改成SQL的uniqueidentifier类型主键并设置默认值,你需要手动定义日志表结构,再配置Serilog适配这个自定义表:
1. 手动创建自定义日志表
Serilog默认会自动生成带自增Id的日志表,所以你得先手动建表,指定Id为uniqueidentifier类型,设为主键并加默认值NEWID()。SQL脚本示例:
CREATE TABLE Logs ( Id UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(), Message NVARCHAR(MAX) NOT NULL, MessageTemplate NVARCHAR(MAX) NOT NULL, Level NVARCHAR(128) NOT NULL, TimeStamp DATETIME NOT NULL, Exception NVARCHAR(MAX), Properties NVARCHAR(MAX) -- 其他字段可根据Serilog默认输出调整 )
2. 配置Serilog适配自定义表
在代码里通过ColumnOptions指定主键列的属性,同时关闭自动建表功能(避免Serilog生成默认表):
var columnOptions = new ColumnOptions { PrimaryKey = new ColumnOptions.PrimaryKeyColumnOptions { ColumnName = "Id", DataType = SqlDbType.UniqueIdentifier, DefaultValue = "NEWID()" } }; Log.Logger = new LoggerConfiguration() .WriteTo.MSSqlServer( connectionString: "你的数据库连接字符串", tableName: "Logs", columnOptions: columnOptions, autoCreateSqlTable: false // 必须设为false,用你手动建的表 ) .CreateLogger();
注意点
- 如果之前已经有Serilog自动生成的
Logs表,先删掉或修改结构,否则会冲突。 - 确保
ColumnOptions里的配置和你手动建的表完全匹配,比如列名、类型一致。 - 测试时写入一条日志,检查数据库里的Id是否是自动生成的GUID。
内容的提问来源于stack exchange,提问作者EvanHuang
相关产品推荐
相关产品推荐

