Intereting Posts
Как сохранить входное значение файла после отправки формы с ошибками? phpstorm xdebug с проектом symfony2 Как объединить запросы для нескольких файлов javascript в один HTTP-запрос? как считать все флажки в форме (Javascript) Laravel-Core: Почему Laravel сохраняет псевдонимы несколько раз? Общие таблицы Drupal, но из другой базы данных Mysqli Подготовить заявления + Binding Order BY Почему эти Heredoc и Nowdoc вызывают ошибки? Использование API для отправки ссылок не включает в себя изображение, название или мета-дескриптор PHP Редактирование существующей PDF-страницы с несколькими файлами с использованием FPDF и FPDI Отключите другие флажки, если два из них выбраны с помощью jquery $ this-> db-> insert_id (); возвращая 0 каждый раз в codeigniter Обрезаемая фатальная ошибка: объект класса PDOStatement не может быть преобразован в строку в D Публикация на стене пользователя, не будучи онлайн / Записан – Facebook Sharing с помощью Graph API Как заменить символы не в диапазоне на «*» в PHP?

Как я могу получить доступ к файлам журнала CakePHP на Heroku?

Я развернул приложение CakePHP в Heroku. CakePHP записывает свои журналы в APP_ROOT/app/tmp/logs/error.log и APP_ROOT/app/tmp/logs/debug.log по умолчанию, но так как нет возможности получить оболочку для запущенного веб-дилера Heroku, я не могу см. содержимое этих файлов.

Как я понимаю, heroku logs возвращает все, что было сброшено в STDERR и STDOUT . Если я прав по этому поводу, есть ли способ заставить CakePHP отправлять свои журналы в STDOUT ?

Heroku PHP Buildpack обрабатывает файлы журнала Apache и PHP как фоновый процесс как часть настройки dyno. Смотри ниже.

 cat >>boot.sh <<EOF for var in \`env|cut -f1 -d=\`; do echo "PassEnv \$var" >> /app/apache/conf/httpd.conf; done touch /app/apache/logs/error_log touch /app/apache/logs/access_log tail -F /app/apache/logs/error_log & tail -F /app/apache/logs/access_log & export LD_LIBRARY_PATH=/app/php/ext export PHP_INI_SCAN_DIR=/app/www echo "Launching apache" exec /app/apache/bin/httpd -DNO_DETACH EOF 

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

 touch /app/www/tmp/logs/error.log tail -F /app/www/app/tmp/logs/error.log & 

Но это не сработало. Фактически, если не учитывать специфику CakePHP, я не вижу в heroku logs содержимого журнала PHP или Apache.

Я думаю, что следующее может работать. Убедитесь, что вы используете CakePHP 2.3.9.

 App::uses('ConsoleOutput', 'Console'); CakeLog::config('default', array( 'engine' => 'ConsoleLog', 'stream' => new ConsoleOutput('php://stdout') )); CakeLog::config('stdout', array( 'engine' => 'ConsoleLog', 'types' => array('notice', 'info'), 'stream' => new ConsoleOutput('php://stdout') )); CakeLog::config('stderr', array( 'engine' => 'ConsoleLog', 'types' => array('emergency', 'alert', 'critical', 'error', 'warning', 'debug'), 'stream' => new ConsoleOutput('php://stderr') )); CakeLog::config('debug', array( 'engine' => 'ConsoleLog', 'types' => array('notice', 'info', 'debug'), 'format' => 'debug %s: %s', 'stream' => new ConsoleOutput('php://stdout') )); CakeLog::config('error', array( 'engine' => 'ConsoleLog', 'types' => array('warning', 'error', 'critical', 'alert', 'emergency'), 'format' => 'error %s: %s', 'stream' => new ConsoleOutput('php://stderr') )); 

Из документации Heroku: https://devcenter.heroku.com/articles/php-logging#cakephp

В своей конфигурации приложения поручите CakePHP использовать механизм ConsoleLog для ваших настроек журнала:

 CakeLog::config('default', array( 'engine' => 'ConsoleLog', )); 

Затем вы можете использовать обычные методы ведения журнала.

 CakeLog::warning("Hello, this is a test message!"); 

Дополнительную информацию см. В разделе «Ведение журнала» руководства CakePHP.