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

如何在C#中使用Serilog记录类路径、方法名及行号

实现Serilog输出类名、方法名及行号的配置步骤

要在你的.NET Framework 4.6.1项目中实现Serilog日志包含调用处的类名、方法名和行号,需按以下步骤修改配置:

1. 安装必要的NuGet包

首先安装Serilog.Enrichers.Caller包,它提供捕获调用者上下文信息的能力:

Install-Package Serilog.Enrichers.Caller

2. 修改SerilogClass的日志配置

在静态构造函数的LoggerConfiguration中添加调用者信息增强器,并更新输出模板以包含所需字段:

public class SerilogClass
{
    public static readonly ILogger _log;
    static SerilogClass()
    {
        string logsFolder = ConfigurationManager.AppSettings["logsFolder"];
        string logFileName = Path.Combine(logsFolder, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log");
        
        _log = new LoggerConfiguration()
                .MinimumLevel.Debug()
                // 启用调用者信息捕获,获取方法名、行号、文件路径
                .Enrich.WithCaller()
                // 启用SourceContext,用于捕获类完整名称
                .Enrich.WithSourceContext()
                // 更新输出模板,新增类名、方法名、行号字段
                .WriteTo.File(logFileName, 
                    outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] [{SourceContext}] {CallerMemberName} (Line {CallerLineNumber}): {Message:Ij}{NewLine}{Exception}")
                .CreateLogger();
    }
}

3. 修改日志调用代码

在每个需要日志的类中,使用ForContext<当前类>()获取绑定到当前类的Logger实例,SourceContext会自动填充为类的完整命名空间+类名:

public class MyClass
{
    // 绑定当前类的Logger,自动填充类名上下文
    private readonly ILogger _log = SerilogClass._log.ForContext<MyClass>();

    public void GetData()
    {
         _log.Information("run GetData");
    }
}

字段说明

  • {SourceContext}:输出类的完整命名空间+类名(如YourNamespace.MyClass)
  • {CallerMemberName}:输出调用日志的方法名(如GetData)
  • {CallerLineNumber}:输出调用日志的代码行号
  • 可选{CallerFilePath}:输出调用日志的代码文件完整路径,若只需文件名可写为{CallerFilePath:f}

内容的提问来源于stack exchange,提问作者Miriam F.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:52:09