我在我的项目 Angular、web api、EF 中使用了 serilog 和 SEQ。我对两者都是新手。
1) 如何确保每次我写错误、信息、调试时都应该包含 ClassName.Method Name。我知道我必须创建 Enrich 但不确定如何获取 ClassName.Method Name
例如
Class Test
{
public void testing(){
// logger.Error("Error ....");}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我看到日志时,它应该显示“29/09/2012 10:00:00, Test=>testing Error .....”
在,短 DateTime、ClassName、MethodName 和 Message
我最近将日志记录添加到了ASP.Net Core项目中。当前,日志以以下格式写入.txt文件:
{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {消息} {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.");
}
}
Run Code Online (Sandbox Code Playgroud)
我当前正在使用Serilog并使用以下LoggerConfiguration:
var logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.WriteTo.RollingFile(Configuration.GetValue<string>("LogFilePath") + "-{Date}.txt", LogEventLevel.Information)
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
如何将类和方法添加到日志中?
编辑
我向.WriteTo.Rollingfile()方法添加了一个自定义outputTemplate,如下所示:
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}")
Run Code Online (Sandbox Code Playgroud)
这导致将名称空间和类添加到日志中,现在仅缺少该方法
在WriteTo.Observer方法中,我想传递格式化日志消息,因为它是使用格式化模板呈现的。我该怎么做?谢谢
class Program
{
static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.LiterateConsole()
.WriteTo.RollingFile("log-{Date}.txt")
.WriteTo.Observers(events => events.Do(evt => { Console.WriteLine($"Observed event {evt.MessageTemplate.Text}"); }).Subscribe())
.WriteTo.Observers(events => events.Do(evt => { LogHandler(evt.MessageTemplate.Text);}).Subscribe())
.CreateLogger();
Log.Logger.Information("Log msg from Main");
Console.ReadLine();
}
public static void LogHandler(string logMsg)
{
Console.WriteLine("LogHandler: " + logMsg); //I want the complete formatted log message as it would appear in a file i.e. "[10:20:14 INF] Log msg from DoNothing"
}
}
Run Code Online (Sandbox Code Playgroud)