Эквивалент LogRotate для Windows?
У нас есть огромный лог-файл, который пишется приложением производителя. Давайте предположим, что продавец не будет делать то, что мы просим. Есть ли способ вращать этот лог-файл? Мы смотрим примерно на 300 МБ в час на запись - я бы предпочел разделить это на 10 МБ кусками и позволить всему, что старше одного дня или более 1000 файлов, упасть с обрыва.
(Я знаю, я знаю, возможный дубликат Как вы вращаете журналы Apache в Windows, не прерывая обслуживание?)
Ага - журнал Chomp был мертв, но поиск "chomp logrotate" привел меня на его новый сайт. Завтра попробую и отвечу, если мне понравится. Я все еще хотел бы услышать о программном обеспечении, которое кто-либо еще использует, который работает для этого.
3 ответа
Как бы я ни удивлялся, предложение Cygwin - один из немногих доступных вам вариантов. Оттуда вы можете использовать logrotate
,
Я еще не использовал его, но LogRotateWin - это нативная реализация logrotate для Windows, которая выглядит многообещающе. По крайней мере, это не требует Cygwin.
Взгляните на logwot8, который представляет собой пакет logrotate, ограниченной оболочки и необходимых компонентов слоя cygwin, готовых к работе "из коробки" (размер установщика 4 МБ). Вам необходимо настроить файл конфигурации в соответствии с вашими требованиями. Это бесплатно для использования и распространения под лицензией BSD с 2 предложениями.
Отказ от ответственности: я разработчик:-)
Попробуйте LogRotateWin
Я пробовал LogRotateWin последние несколько дней.
Проекты кажутся несколько заброшенными, и я обнаружил несколько ошибок в небольшом тестировании, которое я провел. (Например, некоторые параметры командной строки, которые показывает "--help", на самом деле не реализованы. Например, отслеживание состояния через файл состояния logrotate.status не работает для относительных путей в logrotate.conf. Вместо этого они ВСЕГДА меняются. Не только тогда, когда их время пришло. Таким образом, вы можете использовать только абсолютные пути.)
Но размер exe составляет всего 40 КБ, и у него есть несколько приятных функций. И мне нравится тот факт, что их миссия: "Цель состоит в том, чтобы использовать те же параметры и файлы командной строки, что и в версии для Linux". Мне это нравится.
Полезный пример стартового пакета и пример файла conf ниже.
Регистрация вывода logrotate
Что-то вроде мета-проблемы: как вы регистрируете действия самого logrotate? Я заключил вызов logrotate.exe в пакетный файл. Он записывает все во временный файл, затем вызывает logrotate, затем добавляет все из временного файла в окончательный файл журнала, а затем удаляет этот временный файл. И затем этот последний файл журнала будет обработан самим logrotate.exe при следующем запуске. Затем я запускаю этот стартовый пакетный файл через планировщик задач Windows.
Мега хитроумный, но делает свою работу.
Do-LogRotate.bat
:
setlocal
REM Quick and dirty. Wild mixture of Batch and PowerShell. No error checking.
REM Change current directory to where our script is.
cd /D "%~dp0"
set "TEMPOUTPUTFILE=logrotate.temp-log"
set "FINALOUTPUTFILE=logrotate.log"
echo. 1>> %TEMPOUTPUTFILE% 2>&1
powershell -command "& {Write-Output((get-date -format o) + ' Logrotate script START.')}" 1>> %TEMPOUTPUTFILE% 2>&1
logrotate.exe -s logrotate.status logrotate.conf --verbose 1>> %TEMPOUTPUTFILE% 2>&1
powershell -command "& {Write-Output((get-date -format o) + ' Logrotate script END.')}" 1>> %TEMPOUTPUTFILE% 2>&1
REM Somewhat of a hack. I can't have logrotate handle its own logs on
REM Windows it seems.
REM -- I guess file options for shared access are not set in the right way when
REM you use the ">>" redirect operator. Neither "move", nor "copytruncate"
REM logrotate directives work.
REM So instead append the contents to the other outputfile. -- Not sure this
REM this really works. But oh, well. The logrotate logs themselves are not
REM really that important. So it's not too terrible if we lose a few of them.
TYPE %TEMPOUTPUTFILE% >> %FINALOUTPUTFILE%
DEL %TEMPOUTPUTFILE%
logrotate.conf
:
C:\winscp\WinSCP.log {
daily
minsize 1M
rotate 10
}
# Unfortunately relative paths don't work.
C:\dev\logrotatetests\logrotate.log {
monthly
rotate 5
}
Связанное чтение: я боролся с журналами Apache Tomcat в Windows. Это то, что заставило меня заглянуть в logrotatewin. https://stackoverflow.com/questions/19787279/where-to-configure-internal-tomcat7-stdout-stderr-log-files/54423803#54423803