proces logrotacji okna standardowe i stderr

1

Mam usługę w systemie Windows, która uruchamia inny proces, który drukuje wiele wierszy do swoich STDERR i STDOUT. Przechwytuję te wiersze i przekierowuję je do pliku dziennika. Chciałbym przeprowadzić logrotację tego pliku dziennika, jeśli jego rozmiar staje się zbyt duży, aby utworzyć inny plik i zapisać poprzedni. zamiast samodzielnie go wdrożyć, pomyślałem o użyciu bibliotek logrotate innych firm, takich jak spdlog.

Problem polega na tym, że nie mogę oczywiście wykonać procesu korzystania z interfejsu API rejestratora i jeśli

ItamarBe
źródło

Odpowiedzi:

0

Przygotowałem bardzo prosty skrypt Powershell, który poprowadzi Cię we właściwym kierunku.

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. Pobiera plik activelog
  2. Obejmuje rozmiar pliku activelog do kilobajtów
  3. Sprawdza, czy plik Activelog ma rozmiar 150 KB
  4. Jeśli plik ma rozmiar 150 KB, pobiera zawartość pliku i ustawia go na nowy plik.
  5. Jeśli plik NIE ma rozmiaru 150kb, kończy skrypt.

Na co zwrócić uwagę

Istnieją zduplikowane pliki wyjątki to główna rzecz, na którą powinieneś zwrócić uwagę. W zależności od progu pliku, możesz chcieć dodać liczbę przyrostową do NOWEJ nazwy pliku.

Mam nadzieję że to pomoże.

bbatman
źródło