[logRotation] Ротация файла error.log (журнал ошибок MODX)
Дополнение избавляет от проблемы «разрастания» файла ошибок error.log
Ротация логов
На некоторых сайтах за годы работы скопилось огромное количество записей в журнале ошибок MODX. Файл error.log может «весить» гигабайты.Дополнение logRotation постоянно проверяет размер этого файла. Как только он превысит максимальный размер, указанный в системных настройках, плагин удалит старые записи и тем самым уменьшит размер файла.
Инструкция
Установите дополнение и в системной настройке logrotation_size укажите желаемый максимальный размер файла.Дополнение в modstore.pro.
Комментарии: 15
Супер, Илья! Спасибо за компонент!
Правильно, всё-таки, проблемы решать — а не просто удалять сообщения о них.
Безусловно. Я пользуюсь дополнением controlErrorLog — всегда видно, что есть ошибки. Но есть сайты, в админку которых люди не заходят годами — и иногда такие казусы случаются. Даже на modhost очень старые записи в журналах сервера удаляются)
Разве что ошибка 'Error caching lexicon topic lexicon/ru/core/resource' вылезает то и дело даже на чистой установке. И ещё бывают какие-то глюки хостинга, и тогда уже компоненты или движок сыпят ошибки. Короче, чистые логи это походу недостижимый идеал)
Это не совсем ротация получается, а скорее лимитирование по размеру, у нас в ТАО старый логер тоже так умеет, но я бы еще добавил возможность сохранять старые файлы, как это делается в linux. Т.е. после отсечки сохранять файл error.log.1, error.log.2 и так далее, а самые актуальные записи держать в стандартном файле.
Да, надо подумать, как это реализовать… Но эти файлы error.log.1, error.log.2 и т. д. — они же тоже не до бесконечности должны сохраняться? Есть какой-то стандартный, общепринятый лимит?
как в linux в архив старые логи кидать, упакованные все равно копейки весят.
В настройках лимит настраивать, задав по умолчанию значение определенное. Вот например утилита logrotate в linux — www.dmosk.ru/miniinstruktions.php?mini=logrotate-linux
Я вот таким вариантом пользуюсь:
<?php
if( in_array($modx->event->name, ['OnManagerPageInit','OnBeforeManagerLogin']) ) {
$logpath = MODX_CORE_PATH . 'cache/logs/error.log';
if( file_exists($logpath) ) {
if(filesize($logpath) > 5000000) {
$logcontent = file_get_contents($logpath);
$filename = 'error-'. date("Y-m-d_H:i:s");
$zip = new ZipArchive();
$zip->open(MODX_CORE_PATH . 'cache/logs/'. $filename . '.zip', ZipArchive::CREATE);
$zip->addFromString($filename . '.txt', $logcontent);
$zip->close();
$modx->runProcessor('system/errorlog/clear');
}
}
}
Супер! Спасибо, попробую внедрить эту фишечку)
С большим файлом на легком тарифе будут проблемы с памятью.
Надо потестировать. Но если большой файл просто удалить, то в дальнейшем проблем быть не должно.
Проблема из-за функции fseek будет?
file_get_contents()
А, ну это да… У меня чуть по-другому работа с файлом реализована):
github.com/ilyautkin/logRotation/blob/master/core/components/logrotation/elements/plugins/logrotation.php
github.com/ilyautkin/logRotation/blob/master/core/components/logrotation/elements/plugins/logrotation.php
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.