Назад | Перейти на главную страницу

logrotate процесс stdout и stderr окна

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

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

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

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