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

Serilog.Sinks.SQLite如何创建自定义列 可否配置MSSQL Sink写入SQLite

Serilog.Sinks.SQLite 自定义列配置及替代方案解答

一、为SQLite日志表添加自定义列的实现方法

Serilog.Sinks.SQLite 原生支持自定义列,不需要修改源码,按以下步骤配置即可:

  • 初始化日志配置时不要使用默认列规则,手动实例化SQLiteColumnOptions对象,通过AdditionalColumns字段声明你需要的自定义列,指定每列的名称、数据类型、是否允许为空等属性,将AddDefaultColumns设为true即可保留默认的日志基础列(日志ID、时间戳、级别、消息、异常、属性集合等)。
  • 声明完列结构后,通过ColumnWriters字典为每个自定义列绑定值提取逻辑,直接从日志事件的Properties集合中读取你通过Enricher注入的属性值即可,注意Serilog存储的属性值默认包裹了双引号,提取后需要手动去除。
  • 如果你的SQLite日志文件已经生成,手动给已存在的Logs表添加对应自定义列即可;如果是新库,程序启动时会自动按你配置的结构建表,不需要手动写SQL建表。

配置示例:

// 定义列配置
var columnOptions = new SQLiteColumnOptions
{
    AddDefaultColumns = true,
    AdditionalColumns = new List<SQLiteColumn>
    {
        new SQLiteColumn { ColumnName = "ProcessName", DataType = SQLiteType.Text, AllowNull = true },
        new SQLiteColumn { ColumnName = "EnvironmentName", DataType = SQLiteType.Text, AllowNull = true }
    }
};

// 绑定自定义列的值提取规则
columnOptions.ColumnWriters.Add("ProcessName", logEvent =>
{
    logEvent.Properties.TryGetValue("ProcessName", out var procValue);
    return procValue?.ToString().Trim('"');
});
columnOptions.ColumnWriters.Add("EnvironmentName", logEvent =>
{
    logEvent.Properties.TryGetValue("EnvironmentName", out var envValue);
    return envValue?.ToString().Trim('"');
});

// 初始化Logger
Log.Logger = new LoggerConfiguration()
    .Enrich.WithProcessName()
    .Enrich.WithEnvironmentName()
    .WriteTo.SQLite(
        sqliteDbPath: "./log.db",
        tableName: "Logs",
        columnOptions: columnOptions
    )
    .CreateLogger();

二、MSSQL Sink写入SQLite的可行性说明

无法通过配置MSSQL Sink实现写入SQLite文件,原因如下:

  • Serilog.Sinks.MSSqlServer 底层完全适配Microsoft SQL Server的通信协议、SQL语法、数据类型规则,和SQLite的文件存储逻辑、SQL方言、类型系统存在本质差异,没有提供切换目标数据库类型的配置入口,强行连接SQLite文件会出现语法不兼容、类型映射错误等问题。
  • 如果需要文档更完善的SQLite写入方案,直接使用上述自定义列配置即可,该逻辑是官方包原生支持的,不需要依赖第三方二次封装,稳定性有保障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:57:25