【发布时间】:2013-05-19 00:27:30
【问题描述】:
我已经为 Heroku 部署了一个 CakePHP 应用程序。 CakePHP 默认将其日志写入 APP_ROOT/app/tmp/logs/error.log 和 APP_ROOT/app/tmp/logs/debug.log,但由于无法为正在运行的 Heroku web dyno 获取 shell,因此我看不到这些文件的内容。
据我了解,heroku logs 命令返回已转储到STDERR 和STDOUT 的所有内容。如果我是对的,有没有办法强制 CakePHP 将其日志发送到 STDOUT?
The 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 日志内容。
【问题讨论】:
-
您可以使用DatabaseLog 登录到数据库,可以是相同的(默认)或其他。优点是它们不会在重新部署时丢失,在适用的情况下在多个应用程序之间共享,并且可以更容易地通过这种方式进行搜索。