Задать вопрос
@buranich

Yii::log() не работает в теле воркера RabbitMQ?

Здравствуйте!

Столкнулся с проблемой при вызове функции Yii::log() в теле callback-функции воркера RabbitMQ.

Пишу так:
$callback = function($msg) {
    Yii::log('Log me please', 'error', 'application');
};
$channel->basic_consume('task_queue', '', false, true, false, false, $callback);

и в логах пусто.
Если же вызвать функцию вне тела callback-функции, то лог пишется. Иначе говоря, роутинг логов настроен правильно.

Таже заметил, что если прекратить выполнение скрипта в теле callback-функции, то лог запишется:
$callback = function($msg) {
    Yii::log('Log me please', 'error', 'application');
    exit; // лог появился!
};
$channel->basic_consume('task_queue', '', false, true, false, false, $callback);

Из этого я делаю вывод, что имеет место какая-то буферизация логов, который пишутся только по завершению скрипта. А нужно писать в режиме реального времени, поскольку воркер никогда не завершает своей работы.

Буду признателен за помошь!
  • Вопрос задан
  • 3453 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@buranich Автор вопроса
Действительно, есть буферизация логов. Поэтому для того, чтобы сразу записать лог, нужно сделать так:
Yii::log('Log me please', 'error', 'application');
Yii::getLogger()->flush(true);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы