简体   繁体   中英

Serilog logs to console but not to file

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

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");

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM