我想从我的系统(.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 中添加什么? 我很乐意提供建议。 谢谢。
要在 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