1. Устанавливаем
composer require monolog/monolog
2. Подключаем, если composer autoload ещё не подключен
require_once 'vendor/autoload.php';
3. Создаём логгер в нашем крон-скрипте
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('main');
$logger->setHandlers(
array(
new StreamHandler('php://stdout'),
new StreamHandler('php://stderr', Logger::ERROR),
)
);
// это сообщение будет сохранено в файл
$logger->info('Info message');
// это сообщение будет сохранено в файл и отправлено на почту
$logger->error('Error message');
4. Crontab: делаем, чтобы все сообщения сохранялись в файл, а ошибки отправлялись на почту
4.1. Включаем отправку на почту, добавив в crontab:
MAILTO=login@example.com
4.2. Добавляем запуск скрипта в крон:
0 0 * * * /usr/bin/php /path/to/script.php >> /path/to/log.log
>>
дописывает строки в конец файла, поэтому для него нужно настроить ротацию.
Либо можно вместо >>
использовать >
, тогда файл лога будет перезаписываться с нуля, минус в том, что в этом случае в лог сохранится только информация о последнем запуске скрипта.
5. Другие варианты перенаправления stdout и stderr потоков
Перенаправляем всё в /dev/null
(т. е. никуда не записываем и не отправляем на почту):
/usr/bin/php /path/to/script.php > /dev/null 2>&1
Ничего не перенаправляем, отправляем всё на почту:
/usr/bin/php /path/to/script.php
Записываем всё в файл, и не отправляем ничего на почту:
/usr/bin/php /path/to/script.php >> /path/to/log.log 2>/dev/null