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

如何让Serilog日志记录代码起源位置(文件、行号)?

如何配置Serilog记录日志的起源位置(文件、行号)

要让Serilog记录日志的调用文件、行号等起源信息,需通过启用调用者信息增强和调整输出格式两个关键步骤实现,具体操作如下:

1. 安装必要的NuGet包

首先需要安装Serilog.Enrichers.Caller扩展包,它负责收集调用者的文件、行号等信息:

Install-Package Serilog.Enrichers.Caller
# 或使用.NET CLI
dotnet add package Serilog.Enrichers.Caller

2. 修改appsettings.json配置

在Serilog配置节点中添加Enrich数组启用调用者信息增强,同时调整输出格式化器确保信息被正确输出:

"Serilog": {
  "MinimumLevel": {
    "Default": "Information"
  },
  // 启用调用者信息增强
  "Enrich": [ 
    "FromLogContext", 
    "WithCaller",          // 记录调用者文件路径
    "WithCallerLineNumber",// 记录调用者行号
    "WithCallerMemberName" // 记录调用者方法名
  ],
  "WriteTo": [
    { 
      "Name": "Console",
      "Args": {
        // 自定义控制台输出格式,包含调用者信息
        "formatter": "Serilog.Formatting.Display.MessageTemplateTextFormatter, Serilog",
        "format": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}【调用位置】{Caller}:{CallerLineNumber}{NewLine}{Exception}"
      }
    },
    {
      "Name": "File",
      "Args": {
        "path": "./logs/log.json",
        "rollingInterval": "Day",
        "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
        "restrictedToMinimumLevel": "Warning"
      }
    }
  ]
}

配置说明:

  • Enrich节点的三个WithCaller开头配置项,分别负责收集文件路径、行号、调用方法名;
  • 控制台输出通过自定义format模板,将调用者信息直观展示;
  • JSON文件输出无需额外调整,JsonFormatter会自动将所有增强字段(如Caller、CallerLineNumber)写入JSON结构。

3. 确认Program.cs初始化代码

你当前的Serilog初始化代码无需修改,它会自动读取配置文件中的增强设置:

builder.Host.UseSerilog(
        (context, configuration) => configuration.ReadFrom.Configuration(context.Configuration));

注意事项

  • 调用者信息收集会带来轻微性能开销,生产环境若对性能敏感,可仅在Debug环境启用该增强,或限制仅对特定日志级别生效;
  • 第三方组件(如EF Core)输出的日志,无法获取你的代码层面的调用位置,因为这些日志由组件内部生成,不属于你的代码调用链。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:52:41