通过配置文件(使用nuget包Serilog.Settings.Configuration)配置Serilog时,达到容量限制时不会创建滚动日志文件。
按照this question和this issue中的建议,我使用的是Serlog.Sinks.File (版本4.0.0),但没有创建滚动文件。
这是我的serilog配置文件appsettings.json
{
"Serilog": {
"Using": [
"Serilog.Sinks.File",
"Serilog.Sinks.Console"
],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "%LogPath%\\Logs\\log.txt",
"rollOnFileSizeLimit ": true,
"retainedFileCountLimit ": 20,
"rollingInterval": "Day",
"fileSizeLimitBytes": 10000
}
},
{
"Name": "Console"
}
],
"Enrich": [ "FromLogContext", "WithMachineName" ],
"Destructure": [
],
"Properties": {
}
}
}这是我告诉Serilog从配置中读取的代码:
//previous code ommited...
.ConfigureAppConfiguration((hostContext, configApp) =>
{
Environment.SetEnvironmentVariable("LogPath", AppDomain.CurrentDomain.BaseDirectory);
configApp.AddJsonFile("appsettings.json", optional: false);
configApp.AddEnvironmentVariables();
configApp.AddCommandLine(args);
})
.UseSerilog((hostingContext, loggerConfiguration) =>
{
loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration);
.WriteTo.Console();
})当文件大小达到10KB时,它将停止增长,并且不会创建新的日志文件。顺便说一句,按天滚动仍然有效。
我还通过代码配置Serilog进行了验证,它可以工作,所以我认为它与接收器无关……
这是可以工作的代码
.UseSerilog((hostingContext, loggerConfiguration) =>
{
loggerConfiguration.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.File(path: Path.Combine(Environment.CurrentDirectory, "Logs", "log.txt"),
rollOnFileSizeLimit: true,
retainedFileCountLimit: 20,
rollingInterval: RollingInterval.Day,
fileSizeLimitBytes: 10000
)
.WriteTo.Console();
})那么,当配置文件达到文件大小时,如何让Serilog创建滚动文件?
发布于 2019-06-28 16:21:38
我下载并调试了Serilog.Settings.Configuration源代码,发现我在这里犯了一个愚蠢的错误。配置文件中的无效参数名称有额外的空格。
"rollOnFileSizeLimit ": true,
"retainedFileCountLimit ": 20,应该是
"rollOnFileSizeLimit": true,
"retainedFileCountLimit": 20,在纠正这个错误之后,一切都会正常工作。
我想也许项目可能应该在匹配键之前修剪空格...
发布于 2020-10-07 03:49:33
打字时要小心。之前你添加了一个分号,它不会这样编译:
loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration)**;**
.WriteTo.Console();https://stackoverflow.com/questions/56767502
复制相似问题