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


How to capture production CakePHP 3 error logs on Heroku

My CakePHP 3.x 应用程序在 Heroku 上运行。在生产模式(debug => false)下,Heroku日志中不会显示任何错误。我怀疑CakePHP试图将它们写入它自己的logs/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。

这个 Heroku 文档也适用于 CakePHP 2.x。

这是关于日志记录的CakePHP文档,在这个问题上很模糊。

我尝试添加...

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

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

这是我们最终的结果:

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

这会将 emersonthis 中的解决方案应用于每个配置的日志。我们将其放在 Heroku 环境的配置覆盖文件中。我不确定engine与。 className我们的例子之间的区别。当前的 CakePHP 3 食谱使用 className 作为自己的示例。

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

To log errors to the console, add...
Log::config('default', [
    'engine' => 'Console'
]);

。引导.php

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

可能相关:

在 Heroku

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