【发布时间】:2018-05-14 13:49:06
【问题描述】:
我最近在我的 ASP.Net Core 项目中添加了日志记录。目前日志以这种格式写入 .txt 文件:
{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}
例如:
2017-11-30 13:58:22.229 +01:00 [信息] 在数据库中创建的项目。
这很好,但我想知道记录的类的名称和正在执行到这个 .txt 文件的方法。例如,当 A 类使用方法 B 将某些内容写入数据库并记录此内容时,我希望看到类似
ClassA.MethodB:在数据库中创建的项目
所有记录日志的类都将它们的 Logger 注入到它们的构造函数中,例如
public class ClassA
{
private readonly ILogger _log;
public ClassA(ILogger<ClassA> log){
_log = log;
}
public void AddItemToDb(Item item){
//Add item
//On success:
_log.LogInfo("Added item to db.");
}
}
我目前正在使用 Serilog 并使用以下 LoggerConfiguration:
var logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.WriteTo.RollingFile(Configuration.GetValue<string>("LogFilePath") + "-{Date}.txt", LogEventLevel.Information)
.CreateLogger();
如何将类和方法添加到我的日志中?
编辑
我向 .WriteTo.Rollingfile() 方法添加了一个自定义 outputTemplate,如下所示:
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}")
导致命名空间加上类要添加到日志中,现在只缺少方法
【问题讨论】:
-
ILogger是什么类型?是 Serilog 记录器吗?还是 ASP.NET Core 记录器? -
Microsoft.Extensions.Logging.ILogger
-
现在github.com/serilog/serilog/issues/1084#issuecomment-358117004 有一个代码示例可以适应这个。
-
@NicholasBlumhardt 代码打印 Serilog.Extensions.Logging.SerilogLogger.Log(Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, , System.Exception, ) 而不是实际的方法调用记录器
标签: c# asp.net logging asp.net-core serilog