Процесс входа в систему stdout и stderr windows
У меня есть служба на окнах, которая выполняет другой процесс, который печатает много строк в свои STDERR и STDOUT. Я фиксирую эти строки и перенаправляю их в какой-нибудь файл журнала. Я хотел бы войти в этот файл журнала, если его размер становится слишком большим, чтобы создать другой файл и сохранить предыдущий. вместо того, чтобы реализовать это самостоятельно, я подумал об использовании сторонних библиотек logrotate, таких как spdlog.
проблема в том, что я не могу, очевидно, заставить процесс использовать API регистратора, и если
1 ответ
Я собрал очень простой сценарий 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
- Получает файл активного журнала
- Размер файла активного журнала в килобайтах
- Проверяет, является ли файл активного журнала 150 КБ
- Если размер файла составляет 150 КБ, захватывает содержимое файла и устанавливает его в новый файл.
- Если файл НЕ 150 КБ, скрипт завершается.
На что обращать внимание
Исключения из дубликатов существующих файлов - это главное, на что следует обратить внимание. В зависимости от порогового значения файла, вы можете добавить добавочный номер к НОВОМУ имени файла.
Надеюсь это поможет.