Serilog设置刷新间隔

时间:2019-07-01 11:07:45

标签: asp.net-core serilog

我在ASP Core 2.2应用程序中使用serilog。一切正常,但我无法设置flushToDiskInterval。举例来说,这意味着我想每分钟将日志刷新到磁盘上,但是日志在创建时就被刷新了。 我的Program.cs文件:

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .WriteTo.File("Logs/log-{Date}.txt", buffered: true, flushToDiskInterval: TimeSpan.FromSeconds(60))
        .CreateLogger();

        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseSerilog() // Set serilog as the logging provider.
        .UseStartup<Startup>();
}

所以问题是如何设置间隔?

== UPDATE ==


我不明白,但是现在一切正常...我检查了一下,并确定设置了刷新间隔。

2 个答案:

答案 0 :(得分:1)

根据 Carl Björknäs 的建议,要在设置文件中设置此参数,请使用此符号

"flushToDiskInterval": "00:00:01"  //hh:mm:ss

因为,内部在使用Serilog Configuration的时候,是用这个方法来解析时间字符串的:

TimeSpan.Parse(s)

这是 Serilog.Settings.Configuration 片段代码:

class StringArgumentValue : IConfigurationArgumentValue
{
    readonly string _providedValue; 
    .....

    static readonly Dictionary<Type, Func<string, object>> ExtendedTypeConversions = new Dictionary<Type, Func<string, object>>
            {
                { typeof(Uri), s => new Uri(s) },
                { typeof(TimeSpan), s => TimeSpan.Parse(s) },
                { typeof(Type), s => Type.GetType(s, throwOnError:true) },
            }; 
     ... 
}

这是 TimeSpan.Parse 方法文档:

https://docs.microsoft.com/en-us/dotnet/api/system.timespan.parse?view=net-5.0

答案 1 :(得分:0)

要设置源代码,

flushToDiskInterval: TimeSpan.FromSeconds(1)

或以下appsettings.json中的设置,

"WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "restrictedToMinimumLevel": "Verbose",
          ...
          ...
          ...
          "flushToDiskInterval": 1
        }
      }
]

flushToDiskInterval 以秒为单位。

Reference link.

https://github.com/serilog/serilog-aspnetcore

只需回答一下,这样对像我这样寻找答案的人可能有用!