【问题标题】:How to capture production CakePHP 3 error logs on Heroku如何在 Heroku 上捕获生产 CakePHP 3 错误日志
【发布时间】:2016-05-02 15:13:15
【问题描述】:

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

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

'Error' => [
    'errorLevel' => E_ALL & ~E_DEPRECATED,
    'exceptionRenderer' => 'Cake\Error\ExceptionRenderer',
    'skipLog' => [],
    'log' => true,
    'trace' => true,
],

This question 和我的一模一样,但是对于 CakePHP 2.x。

This Heroku documentation 也适用于 CakePHP 2.x。

这里是CakePHP documentation on logging,在这件事上含糊其辞。

我尝试添加...

use Cake\Log\Log;

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

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

【问题讨论】:

  • Syslog != Console。我没有 Heroku 经验,但是如果你想登录到 php://stderr(这是 2.x 中的 ConsoleLog 所做的),那么你需要使用 Console 引擎。
  • @ndm 如果我用Console 替换Syslog 我的方法是否正确?
  • 我会这么认为(鉴于“配置文件”你指的不是config/app.php)。
  • @ndm 我们会处理的。我们使用一个主 app.config 文件并针对特定环境选择性地覆盖它。所以我的 sn-p 处于生产覆盖范围内。文档说要使用引导程序,但我不希望它适用于所有环境。这有意义吗?
  • 一般来说是的。虽然我不会在配置文件中使用编程逻辑,但感觉有点奇怪,并且使交换配置文件格式有点麻烦。就个人而言,我正在使用特定于环境的引导程序,如有必要,这些引导程序会合并到其他配置中。

标签: php cakephp logging heroku


【解决方案1】:

这就是我们结束的地方:

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

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

【讨论】:

    【解决方案2】:

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

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

    ...到 bootstrap.php

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

    可能相关:

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

    【讨论】:

      猜你喜欢
      • 2014-02-13
      • 2015-03-23
      • 2013-05-19
      • 1970-01-01
      • 2012-05-25
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多