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

使用Serilog.Sinks.Oracle时如何指定存储日志的表和列

Serilog.Sinks.Oracle 指定自定义表与列映射配置方法

你可以通过WithSettings指定目标表、WithColumnMapping配置列对应关系来适配你提前创建好的日志表,调整后的配置示例如下:

var connectionString =
      "user id=system;password=oracle;data source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP)(HOST = localhost)(PORT = 49161)))(CONNECT_DATA=(SERVICE_NAME = xe)))";

var logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Oracle(cfg => 
        cfg.WithSettings(connectionString, tableName: "你创建的日志表名")
           // 按你实际的表结构逐个配置列映射
           .WithColumnMapping("LOG_TIMESTAMP", OracleDbType.TimeStamp, ev => ev.Timestamp)
           .WithColumnMapping("LOG_LEVEL", OracleDbType.Varchar2, 16, ev => ev.Level.ToString())
           .WithColumnMapping("CONTENT", OracleDbType.Varchar2, 4000, ev => ev.RenderMessage())
           .WithColumnMapping("EXCEPTION_INFO", OracleDbType.Clob, ev => ev.Exception?.ToString())
           .WithColumnMapping("EXT_PROPERTIES", OracleDbType.Clob, ev => ev.Properties.ToString())
           .UseBurstBatch()
           .CreateSink())
    .CreateLogger();

配置说明

  • 指定目标表:WithSettings方法传入第二个字符串参数tableName即可绑定你提前建好的日志表,若表存在于指定表空间,还可以追加tableSpace: "你的表空间名"参数。
  • 自定义列映射:通过WithColumnMapping方法逐列配置映射规则,入参顺序为:
    • 数据库中实际的列名
    • 该列对应的Oracle数据类型
    • (可选)可变长度类型的长度限制
    • 列值生成规则,从Serilog日志事件对象ev中提取对应内容
  • 若你的表存在自增主键、触发器生成字段等不需要插入的列,无需在映射中配置即可自动忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:06:07