我已经向Heroku部署了CakePHP应用程序。 CakePHP默认将其日志写入APP_ROOT/app/tmp/logs/error.log
和APP_ROOT/app/tmp/logs/debug.log
,但由于无法将shell运行到正在运行的Heroku web dyno,我无法看到这些文件的内容。
据我了解,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日志内容。
答案 0 :(得分:0)
我认为以下可能有用。确保你使用的是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')
));
答案 1 :(得分:0)
来自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手册的“记录”部分。
答案 2 :(得分:0)
在最新版本的CakePHP(> = 3.6.0)中,config/app.php
文件已预先配置为对库存debug
和error
日志使用环境变量替代。这些变量should contain a DSN-style string定义的属性通常与您在config/app.php
文件中放置的属性相同。
在Heroku仪表板的设置下(或通过heroku
cli工具),您可以添加以下ENV变量:
LOG_DEBUG_URL = file:///?className=Cake%5CLog%5CEngine%5CConsoleLog&levels[]=notice&levels[]=info&levels[]=debug
LOG_ERROR_URL = file:///?className=Cake%5CLog%5CEngine%5CConsoleLog&levels[]=warning&levels[]=error&levels[]=critical&levels[]=alert&levels[]=emergency
以上两行复制了CakePHP的常规日志记录,但是将所有输出重定向到控制台而不是文件。