我已经编写了一个日志库,将条目添加到文件或输出流中。
当条目被添加到日志中时,它还包括上下文信息,例如为添加条目而进行的调用的文件和行号。
我的问题是:我应该使用添加条目的调用的文件路径和行号,还是使用触发事件的调用者来记录消息?
<标题> trigger.php:<?php
$do->something(); #line 2
<标题> do.php h1> 在,消息"Did something."被记录为来自do.php第6行。更改日志记录类以说明消息来自trigger.php第2行是不是更好?编辑
澄清一些事情。
- 库在日志条目中包含整个调用堆栈。因此,在功能更丰富的日志类中,你可以看到比上面的例子更多的东西。
- 该库确实使用了日志级别,并将过滤掉不需要的级别。上面的例子并没有显示这一点,但是您可以查看库本身来确定。
不幸的是,我不清楚在这个场景中消息是如何表示的。这个非常小的场景将只显示一个文件路径和一行。假设不能更改,将记录哪个文件路径和行号?
谢谢你的帮助!
标题>标题>另外,如果你有三个关卡而不是两个呢?如果你有四个呢?我建议您采用传统的做法,跟踪实际出现log()调用的行。
class client
{
public function get_some_data()
{
$data = $this->get_my_data();
if (empty($data)) {
$this->log->add('no data in sight');
}
// lots of processing
if ($something) {
$this->log->add('data was corrupted');
}
}
}
//...
$client->get_some_data();
如果您只记录上层调用,您将只知道它发生在get_some_data()中,而不知道确切的位置。你可能会想"是的,但是我可以使用记录的准确错误找到它",但是当你挖掘日志以查明问题时,这真的不是你想要做的。
如果你对这个函数有几个调用,并且你想要更多关于哪一个记录了该行的信息,你可以做的是在你的日志旁边存储一个最小的堆栈跟踪,参见debug_backtrace()。它可以小到
2011-12-25 17:02:37 ERROR "data was corrupted" at /path/client.php:6 (called from /path/somefile.php:57)
我还强烈建议您添加不同的日志记录级别,因为您在开发/调试情况下需要的日志记录并不是您在生产环境中需要的日志记录。