我想在Serilog文件名中使用UTC DateTime。我在appseting.json文件中对serilog使用以下配置。
"Serilog": {
"Using": [],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"Enrich": [
"FromLogContext",
"WithMachineName",
"WithProcessId",
"WithThreadId"
],
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"path": "Logs\\log-.json",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
"rollingInterval": "Hour",
"shared": true
}
}
]
}
下面是用于serilog的program.cs文件代码。
public static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json").Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
try
{
CreateHostBuilder(args).Build().Run();
}
catch (Exception e)
{
Log.Fatal(e, "The Application failed to start correctly");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args).UseSerilog()
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
目前,serilog生成的日志文件名为log-2020091323.json,它不是UTC DateTime。我正在使用asp.net内核3.1。
发布于 2020-09-20 10:30:34
您可以使用Install-Package Serilog.Sinks.Map
nuget包并在Serilog安装程序中信任它来存档这一点,如下面的代码示例所示
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
// Ex: UtcDateTime value '202009201010'
.WriteTo.Map("UtcDateTime", DateTime.UtcNow.ToString("yyyyMMddHHmm")
, (UtcDateTime, wt) => wt.File($"logs/log-{UtcDateTime}.txt"))
.CreateLogger();
Log.Information("Hello, Serilog!");
Log.CloseAndFlush(); // Ex: log file name 'log-202009201010.txt'
此代码将日志保存到每个分钟的新文件中,如果您需要为每个hour use DateTime.UtcNow.ToString("yyyyMMddHH")
或DateTime.UtcNow.ToString("yyyyMMdd")
为每个day配置它。
https://stackoverflow.com/questions/63873570
复制相似问题