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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:22:32