我在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 ==
我不明白,但是现在一切正常...我检查了一下,并确定设置了刷新间隔。
答案 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
以秒为单位。
https://github.com/serilog/serilog-aspnetcore
只需回答一下,这样对像我这样寻找答案的人可能有用!