#php #logging #monolog
#php #ведение журнала #monolog
Вопрос:
Я использую Crunz для запуска задачи. В этой задаче я успешно регистрирую информацию.
При попытке зарегистрировать критическую ошибку в функции обратного вызова я получаю сообщение об ошибке. В журнале упоминается:
[2020-09-16T11:36:24.050666 00:00] MyLogger.CRITICAL: Critical error has occurred (works) [] []
[2020-09-16T11:36:25.343237 00:00] MyLogger.INFO: Performed A [] []
[2020-09-16T11:36:25.420212 00:00] Crunz.ERROR: XXX(object(Closure)) Fatal error: Uncaught Error: Call to a member function setFormatter() on null in /vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php on line 126
Код для моей задачи Crunz следующий:
<?php
declare(strict_types=1);
namespace MyCustomName;
use CrunzSchedule;
use MonologHandlerStreamHandler;
use MonologLogger;
use MonologHandlerSlackWebhookHandler;
$logger = new Logger('MyLogger');
$logger->pushHandler(
new StreamHandler(
customlogsPath() . '/jobs.log',
Logger::INFO
)
);
// Slack
$logger->pushHandler(
new SlackWebhookHandler(
'SLACK_WEBHOOK_URL',
'SLACK_CHANNED',
'someUsername',
true,
'red_circle',
false,
false,
Logger::CRITICAL
)
);
$logger->critical('Critical error has occurred (works)');
$schedule = new Schedule();
$task = $schedule->run(function () use ($logger) {
$myArray = [
1 => 'test'
];
foreach ($myArray as $item) {
$scheduled = true;
if ($scheduled) {
// Do a
$logger->info('Performed A');
} else {
// Do B
$logger->info('Performed B');
}
}
$logger->critical('Critical error (does not work)');
});
$task
->description('XXX')
->preventOverlapping()
->everyMinute()
;
return $schedule;
Как вы можете видеть выше, critical
журнал работает, когда он определен вне функции обратного вызова. Я также получаю это сообщение в Slack.
Комментарии:
1. Оказывается, что уровень регистрации ИНФОРМАЦИИ в SlackWebhookHandler в обратном вызове Crunz вызывает аналогичную ошибку, поэтому она не связана с уровнем ошибки.
Ответ №1:
Когда я определяю pushHandler
внутри моего обратного вызова Crunz, он обрабатывается правильно без каких-либо ошибок. По-видимому, использования $logger
в обратном вызове было недостаточно.