Reputation: 680
I have the below logger configuration and associated classes as below. The expected log messages are below:
2019-03-06 19:49:56.417 +05:30 [INFORMATION] [Main] Start
2019-03-06 19:49:56.435 +05:30 [INFORMATION] [Test1] Test1 logg
I see both the log messages in console. But I see only the first log in the file.
namespace SerilogTest
{
public static class MyLogger
{
public static ILogger getLogger(String className)
{
string logTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u}] [{SourceContext}] {Message}{NewLine}{Exception}";
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(outputTemplate: logTemplate)
.WriteTo.File("log.txt", outputTemplate: logTemplate)
.CreateLogger()
.ForContext("SourceContext", className);
return Log.Logger;
}
}
public class Program
{
private static ILogger Log = MyLogger.getLogger("Main");
private static void Main(String[] args)
{
Log.Information("Start");
Test1 t1 = new Test1();
Console.ReadKey();
}
}
public class Test1
{
private static ILogger Log = MyLogger.getLogger(typeof(Test1).Name);
public Test1()
{
Log.Information("Test1 logg");
}
}
}
Thanks
Upvotes: 2
Views: 8295
Reputation: 7875
You will need to enable multi-process shared log files, set shared
to true
.WriteTo.File("log.txt", outputTemplate: logTemplate, shared: true)
Also no need to crate logger each time you need to log, Just create it one time on application start and use it everywhere in your application (Check below example).
public static class MyLogger
{
public static void CreateLogger()
{
String logTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u}] [{SourceContext}] {Message}{NewLine}{Exception}";
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console(outputTemplate: logTemplate)
.WriteTo.File("log.txt", outputTemplate: logTemplate)
.CreateLogger();
}
}
class Program
{
static void Main(String[] args)
{
MyLogger.CreateLogger();
Log.ForContext("SourceContext", "Main").Information("Start");
Test1 t1 = new Test1();
Console.ReadKey();
}
}
class Test1
{
public Test1()
{
Log.ForContext("SourceContext", typeof(Test1).Name).Information("Test1 logg");
}
}
Upvotes: 9