У меня есть служба в Windows, которая запускает другой процесс, который выводит много строк в свои STDERR и STDOUT. Я фиксирую эти строки и перенаправляю их в какой-нибудь файл журнала. Я хотел бы войти в этот файл журнала, если его размер становится слишком большим для создания другого файла и сохранения предыдущего. вместо того, чтобы реализовывать это самостоятельно, я подумал об использовании сторонних библиотек logrotate, таких как spdlog.
проблема в том, что я явно не могу заставить процесс использовать API логгера, и если
Я собрал очень простой скрипт Powershell, который направит вас в правильном направлении.
Function logrotate (
$activefile = "C:\activelog.text",
$dest = "C:\",$activefile_size,
$newfilename = "arotatedlog.text")
{
$activefile_size = get-item $activefile| Select-Object Name, CreationTime, @{Name="Kbytes";Expression={$_.Length / 1Kb}}
if ($activefile_size.Kbytes -gt 150)
{Write-Host "File size equal or greater than 150KB"
$dest = "$dest + $newfilename"
Get-Content $activefile | Set-Content -Path $dest
}
logrotate
Дубликаты файлов существуют исключения - это главное, на что вам следует обратить внимание. В зависимости от порогового значения файла вы можете захотеть добавить инкрементный номер к НОВОМУ имени файла.
Надеюсь это поможет.