I recently added logging to my ASP.Net Core project. Currently the log writes to a .txt file in this format:
{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}
For example:
2017-11-30 13:58:22.229 +01:00 [Information] Item created in database.
This is fine but I would like to have the name of the class that logs and the method that is being executed to this .txt file. For example when Class A writes something to the database using Method B and logs this, I would like to see something like
ClassA.MethodB: Item created in database
All the classes that log have their Logger injected into their constructors like
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.");
}
}
I'm currently using Serilog and using the following LoggerConfiguration:
var logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.WriteTo.RollingFile(Configuration.GetValue<string>("LogFilePath") + "-{Date}.txt", LogEventLevel.Information)
.CreateLogger();
How can I add the class and method to my logs?
Edit
I added a custom outputTemplate to the .WriteTo.Rollingfile() method like so:
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}")
Which resulted in the namespace plus the class to be added in the log, only the method is missing now
ILogger? Is it the Serilog logger? Or is it the ASP.NET Core logger?