如何在Heroku上捕获生产CakePHP 3错误日志

如何在Heroku上捕获生产CakePHP 3错误日志,php,cakephp,logging,heroku,Php,Cakephp,Logging,Heroku,我的CakePHP 3.x应用程序正在Heroku上运行。当处于生产模式(debug=>false)时,Heroku日志中不会显示任何错误。我怀疑CakePHP试图将它们写入自己的日志/error.log,但我认为在Heroku环境中没有办法访问它们。我想我需要配置CakePHP将错误发送到STDOUT。。。然后希罗库会“看见”他们。在CakePHP v3.x中如何实现这一点 以下是我的配置文件的相关部分: 'Error' => [ 'errorLevel' => E_ALL

我的CakePHP 3.x应用程序正在Heroku上运行。当处于生产模式(
debug=>false
)时,Heroku日志中不会显示任何错误。我怀疑CakePHP试图将它们写入自己的
日志/error.log
,但我认为在Heroku环境中没有办法访问它们。我想我需要配置CakePHP将错误发送到STDOUT。。。然后希罗库会“看见”他们。在CakePHP v3.x中如何实现这一点

以下是我的配置文件的相关部分:

'Error' => [
    'errorLevel' => E_ALL & ~E_DEPRECATED,
    'exceptionRenderer' => 'Cake\Error\ExceptionRenderer',
    'skipLog' => [],
    'log' => true,
    'trace' => true,
],
与我的完全相同,但适用于CakePHP 2.x

也适用于CakePHP 2.x

这是一份在这件事上含糊不清的报告

我试着添加

use Cake\Log\Log;

Log::config('default', [
    'engine' => 'Syslog'
]);

…添加到我的配置文件,但它不起作用。

在NDM提交一个占位符之前,这是我脑海中的一个占位符答案(虽然信息仍然新鲜)

To log errors to the console, add...

Log::config('default', [
    'engine' => 'Console'
]);
…到bootstrap.php

这会导致在运行heroku日志时出现PHP错误。我犯的错误是信任Heroku插件Logentries,这是一个用于查看日志的GUI工具。即使有了上述内容,Logentries仍然没有显示任何PHP错误,但这是另一个问题

可能相关:


它的底部向您展示了如何将登录到自己文件(如CakePHP)的应用程序与Heroku的黑魔法输出连接起来。。。这对我不起作用,但你的相似性可能会有所不同。

我们的结局如下:

# Configure all logs for Heroku.
foreach (array_keys(Configure::read('Log')) as $log) {
    Configure::write("Log.$log.className", 'Console');
}

这会将emersonthis的解决方案应用于每个配置的日志。我们将其放在Heroku环境的配置覆盖文件中。我不确定我们的示例之间的
引擎
类名
的区别。当前的CakePHP 3食谱提供了自己的示例。

Syslog!=控制台
。我没有Heroku的经验,但是如果您想登录到
php://stderr
(这就是2.x中的
ConsoleLog
所做的),然后您需要使用
Console
引擎。@ndm如果我用
Console
替换
Syslog
,我的方法是否正确?我会这样认为(通过“配置文件”给出)你指的不是
config/app.php
)。@ndm我们将进行排序。我们使用一个主app.config文件,并针对特定环境选择性地覆盖它。因此,我的代码段位于生产覆盖中。文档说要使用引导,但我不希望这适用于所有环境。这有意义吗?一般来说,是的。虽然我不会在配置文件中使用编程逻辑,但这感觉有点奇怪,并且使得交换配置文件格式有点麻烦。就我个人而言,我正在使用特定于环境的引导程序,必要时可以合并到其他配置中。