Я развернул приложение 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.