【问题标题】:Logging doesn't occur when a shell is called in CakePHP 2.1在 CakePHP 2.1 中调用 shell 时不会发生日志记录
【发布时间】:2012-02-06 22:16:26
【问题描述】:

我正面临 CakePHP 2.1 的一个奇怪行为:

我有一个方法,$this->Time->getTime();,它总是记录一个动作,然后返回 true。从浏览器调用时,它按预期工作:记录操作,然后返回 true。

我创建了一个 shell,TimeShell,如果$this->Time->getTime(); 返回 true,我在其中记录另一个操作。现在,奇怪的是记录了第二个操作,因此该方法返回 true,但该方法中的操作(显然必须运行,因为它传递了它并返回 true)没有记录。

为什么从 shell 调用方法时没有记录第一个操作? (如果有帮助,shell 会通过我服务器上的 cron 作业运行)

编辑

经过进一步测试,我发现如果我不记录第二个动作(shell 中的那个),那么第一个动作($this->Time->getTime();)会被正确记录。但我不明白为什么 Cake 只记录应该记录的最后一个动作。

此外,似乎只有 DatabaseLogger 以这种方式运行,FileLog 记录这两个操作。很奇怪。

【问题讨论】:

  • Cakephp 2.1 是一个测试版。也许不是最好的主意。
  • 我知道,但我需要它的一些新功能。你相信这可能是问题吗?在更新日志中没有任何关于 shells/console/logs 的内容。

标签: shell cakephp logging cron cakephp-2.1


【解决方案1】:

看起来答案非常简单:我忘记在保存记录的操作之前调用$this->Log->create();,因此第二个操作覆盖了第一个。

话虽如此,如果您在保存数据时遇到任何问题(主要是在发生覆盖时),我建议您检查是否调用了 create(); 方法。在许多情况下,这将是解决方案。

【讨论】:

  • CakePHP 团队建议您使用 CakeLog 对象的静态方法来进行日志记录,而不是传统的继承方法,因为所有对象都不会继承自使用记录器的类。 CakeLog::write() 可能会更好地工作并防止此问题。
  • 这是我记录操作的方式。我已经解决了这个问题,无论如何,谢谢你的提示。
猜你喜欢
  • 2017-02-28
  • 1970-01-01
  • 2014-12-13
  • 2019-06-18
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多