簡體   English   中英

Serilog記錄到控制台但不記錄

[英]Serilog logs to console but not to file

我有以下記錄器配置和相關的類,如下所示。 預期的日志消息如下:

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

我在控制台中看到了兩條日志消息。 但我只看到文件中的第一個日志。

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

謝謝

您需要啟用多進程共享日志文件,將shared設置為true

.WriteTo.File("log.txt", outputTemplate: logTemplate, shared: true)

每次需要記錄時也不需要創建記錄器,只需在應用程序啟動時創建一次,並在應用程序的任何位置使用它(請查看下面的示例)。

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

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM