如何在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.
相关产品推荐
相关产品推荐

