Согласно Serilog , вам нужно будет использовать ведение журнала файлов - похоже, что RollingFile может скоро уйти.
Важное примечание: функция прокрутки в этой раковине была
улучшено и объединено в пакет Serilog.Sinks.File. RollingFile
будет сохраняться в обозримом будущем, однако файл
рекомендуется для новых применений.
Фиксированный формат
Вот простой способ использования File Sink:
appsettings.json
{
"Serilog": {
"MinimumLevel": "Verbose",
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"path": "Logs\\log.txt",
"fileSizeLimitBytes": 3000,
"buffered": false,
"rollOnFileSizeLimit": true,
"retainedFileCountLimit": 3,
"rollingInterval": "Hour"
}
}
]
}
}
Program.cs
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
var loggerConfig = new LoggerConfiguration().ReadFrom.Configuration(configuration);
var logger = loggerConfig.CreateLogger();
Пользовательский формат
В прошлом году, казалось, был некоторый энтузиазм, чтобы указать некоторую конфигурацию по умолчанию, а затем переопределить ее в файлах конфигурации, в команде Serilog и сообществе. Они создали экспериментальный репозиторий и Nuget Package - не уверен, где он стоит сегодня.
Но я думаю, что есть обходной путь - ниже приведен один из способов, как вы могли бы реализовать это немного чище, чем ваш "токеновый" подход.
appsettings.json
{
"FileLogger": {
//"path": "Logs\\log.txt",
}
}
Таким образом, если вы укажете значение в файле конфигурации, оно будет иметь приоритет. Иначе, ваш собственный формат будет использоваться. На мой взгляд, наличие значений по умолчанию, указанных в приложении, и последующее использование конфигураций для их переопределения (а не наоборот) - лучший дизайн.
Program.cs
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
var customLogFileFormat = configuration["FileLogger:path"] ?? $"Logs\\log_{DateTime.Now.ToString("MMddyyyy_hhmmsstt")}log.txt";
var loggerConfig = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File(
path: customLogFileFormat,
fileSizeLimitBytes: 3000,
buffered: true,
rollOnFileSizeLimit: true,
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: 5);
Если вас интересует более подробная информация о моем тестовом приложении, может помочь следующая последовательность команд PoweShell:
mkdir SerilogApp
cd SerilogApp
dotnet new console -f netcoreapp2.2 -n SerilogApp -o SerilogApp
dotnet new sln -n SerilogApp.sln
dotnet sln add .\SerilogApp\SerilogApp.csproj
dotnet add .\SerilogApp\SerilogApp.csproj package Microsoft.Extensions.Configuration -f netcoreapp2.2
dotnet add .\SerilogApp\SerilogApp.csproj package Microsoft.Extensions.Configuration.FileExtensions -f netcoreapp2.2
dotnet add .\SerilogApp\SerilogApp.csproj package Microsoft.Extensions.Configuration.Json -f netcoreapp2.2
dotnet add .\SerilogApp\SerilogApp.csproj package Serilog -f netcoreapp2.2
dotnet add .\SerilogApp\SerilogApp.csproj package Serilog.Settings.Configuration -f netcoreapp2.2
dotnet add .\SerilogApp\SerilogApp.csproj package Serilog.Sinks.Console -f netcoreapp2.2
dotnet add .\SerilogApp\SerilogApp.csproj package Serilog.Sinks.File -f netcoreapp2.2 -v 4.0.0
cd .\SerilogApp
echo $null >> appsettings.json