Процесс входа в систему 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
  1. Получает файл активного журнала
  2. Размер файла активного журнала в килобайтах
  3. Проверяет, является ли файл активного журнала 150 КБ
  4. Если размер файла составляет 150 КБ, захватывает содержимое файла и устанавливает его в новый файл.
  5. Если файл НЕ 150 КБ, скрипт завершается.

На что обращать внимание

Исключения из дубликатов существующих файлов - это главное, на что следует обратить внимание. В зависимости от порогового значения файла, вы можете добавить добавочный номер к НОВОМУ имени файла.

Надеюсь это поможет.

Другие вопросы по тегам