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

Как я могу повернуть файлы журнала PHP в Windows Server 2003?

Наши файлы журнала PHP становятся огромными, и нам нужна служебная программа для регулярной ротации файла. Это на сервере Windows 2003.

Есть ли программа / скрипт, похожий на Linux logrotate?

И да, мы заняты переделкой скриптов PHP, чтобы удалить все ошибки, уведомления и предупреждения.

Если вы используете Apache для запуска PHP, тогда есть встроенная утилита под названием ротация журналов через которую вы можете передавать свои журналы, и он автоматически выполнит ротацию журналов за вас. Вот как вы его используете в Windows:

ErrorLog "|bin/rotatelogs.exe -l logs/error/error.%Y-%m-%d.log 86400"

Другой альтернативой является установка местоположения журнала ошибок PHP во время выполнения в файл, который включает дату, то есть добавьте это в свой предварительный файл:

ini_set('error_log', 'path_to_logs/php_error.'.date('Y-m-d').'.log');

Я знаю твою боль. Несколько лет назад я закончил читать исходный код logrotate и портировал его на Windows (переводя в процессе с C на Perl - да, я обжора для наказания).

Основная проблема с ротацией журналов Windows - это блокировка файлов. Если файл открыт во время ротации, его нельзя переместить, переименовать и т. Д. Я обошел это, решив, что для моего приложения ротация была важнее нескольких пропущенных строк журнала и простого копирования, а затем truncate (хотя, я уверен, что это было нечто большее, к сожалению, у меня нет легкодоступного источника). В любом случае оказалось, что операция была настолько быстрой, что я очень сомневаюсь, что мы потеряли более пары строк в истории ее использования.

Я считаю, что именно поэтому собственные приложения Windows обычно выполняют свою собственную ротацию журналов - само приложение удерживает блокировки и может кэшировать сообщения журнала, пока происходит ротация, для последующей очистки.

По моему опыту, лучший метод - отключить внутренний журнал PHP и записать его в журнал ошибок Windows (или системный журнал на хостах unix).

Оказавшись там, ntsyslog или аналогичный может перенаправлять журналы на хост * nix, где такие инструменты, как logwatch, упрощают фильтрацию.

Я не использую PHP, но с SQUID у меня есть командный файл, который запускается в полночь и останавливает SQUID, переименовывает файл журнала и перезапускает SQUID. Чтобы сгенерировать имя файла, используйте что-то вроде:

for /f "tokens=1" %%i in ('date /t') do set THEDATE=%%i
set THEDAY=%THEDATE:~0,2%
set FILENAME=Squid-%THEDAY%.log

Это британский формат даты, в котором день - это первые два символа. Вы можете выделить любую часть даты, просто изменив вторую строку.

JR

Я использую "rnanalog"для ротации моих журналов Perforce, я использую команду:

C:\Support\Scripts\rnanalog.exe C:\Data\p4journal\audit.log C:\Data\p4backups\audit.logs\audit_mmmddccyy.log

в пакетном файле и просто запустите его в полночь с помощью запланированной задачи.

Если блокировка файла является проблемой, вам, возможно, придется остановить службу на несколько секунд, пока журнал вращается ...