如何在C#中使用Serilog记录classPath、methodName和lineNumber

问题描述 投票:0回答:1

我想从我的系统(.NET Framework 4.6.1)将日志打印到文件我想打印以下信息:类名、方法名、调用日志条目的行号。

我有一个 Serilog 课程: `

    public class SerilogClass
    {
        public static readonly ILogger _log;
        static SerilogClass()
        {
            string logsFolder = ConfigurationManager.AppSettings["logsFolder"];
            string environment = ConfigurationManager.AppSettings["environment"];
            _log = new LoggerConfiguration()
                    .MinimumLevel.Debug()
                    .WriteTo.File(logsFolder + "//" + DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".log", outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:Ij}{NewLine}{Exception}")
                    .CreateLogger();
        }
    }

我正在尝试用日志记录系统:

 public class MyClass
    {
        private readonly ILogger _log = SerilogClass._log;

        public void GetData()
        {
             _log.information("run GetData, **here I want to print by default the class path and the line number**")
        }
    }

我应该在 SerilogClass 中添加什么? 我很乐意提供建议。 谢谢。

c# serilog serilog-sinks-file
1个回答
0
投票

要在 Serilog 中自动记录类名、方法名和行号,可以使用 Serilog.Enrichers.StackTrace NuGet 包。

public class SerilogClass
{
    public static readonly ILogger _log;
    static SerilogClass()
    {
        string logsFolder = ConfigurationManager.AppSettings["logsFolder"];
        string environment = ConfigurationManager.AppSettings["environment"];
        _log = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .Enrich.WithDemystifiedStackTraces() // Add this to enrich with stack trace information
                .WriteTo.File(
                    path: Path.Combine(logsFolder, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log"),
                    outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext}.{Method}({LineNumber}): {Message:lj}{NewLine}{Exception}")
                .CreateLogger();
    }
}

public class MyClass
{
    private readonly ILogger _log = SerilogClass._log.ForContext<MyClass>();

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

下面是使用配置有 Serilog.Enrichers.StackTrace 的 Serilog 时日志条目的外观示例:

[15:42:01 INF] MyNamespace.MyClass.GetData(42): Run GetData
© www.soinside.com 2019 - 2024. All rights reserved.