记录用户遇到的错误的最佳方法是什么?
我最初的想法是创建一个函数,用一个唯一的数字记录错误,并可能将变量转储到数据库的记录中。
有更好的方法吗?我应该使用文本文件日志吗?
答案 0 :(得分:4)
如何覆盖默认的PHP错误处理程序? 该网站应提供一些基本信息:http://www.php.net/manual/en/function.set-error-handler.php以及http://www.php.net/manual/en/function.set-exception-handler.php
的第一条评论您可能还想存储数据库错误,也许某种自定义函数允许您使用以下代码:
<?php
$objQueryResult = mysql_query("query here") or some_kind_of_function_here();
?>
您可能希望将记录的错误存储在公共html根文件夹之外的文件中,以确保人们无法偶然访问它。 我还假设,您希望在这样的文件中存储完整的堆栈跟踪,因为这样您就可以实际调试问题。 覆盖默认错误处理程序时,请注意您不要忘记向用户发送一条好消息(并在需要时退出脚本)。
我建议存储:
我建议你使用debug_print_backtrace()来确保获得数据摘要。 debug_backtrace()函数提供了相同的信息,但它有时只会给你太多的信息。 您可以用来捕获回溯的代码:
<?php
ob_start();
debug_print_backtrace();
$trace = ob_get_contents();
ob_end_clean();
?>
要存储它,你可以使用纯文本输出,如果你没有得到太多错误,否则可能使用像sqlite这样的东西? - 只是不要使用相同的SQL连接来存储错误,因为如果你有网络服务器到SQL连接错误,这可能会引发更多问题。
答案 1 :(得分:0)
好吧,至少写入本地系统上的文本文件应该不易出错,因此也可以捕获数据库错误:)
我更愿意将当前状态的合适转储写入简单的日志文件。除了“自己的”状态(即应用程序的变量和对象)之外,您可以考虑使用phpinfo()
来获取要包含的环境和请求变量的灵感。
答案 2 :(得分:0)
PEAR :: Log对于这种日志记录很方便。 e.g。
$logger->alert("your message"); $logger->warning("your message"); $logger->notice("your message");
等
你可以登录到文件或数据库,我写了一个支持PDO的sqlite扩展,非常简单。
这些也可以放入异常处理代码中。
记录:id,logtime,身份,严重性1-7(即“警报”)和您的消息。
答案 3 :(得分:0)
我认为@ Icheb的答案涵盖了所有内容。
我今年在一个我认为会分享的项目中尝试了一些新的东西。
对于基于PHP的内容聚合/分发服务,在某些服务器上在后台安静运行的应用程序,您往往会忘记,我们需要一个错误报告系统,以确保我们注意到错误。
发生的每个错误都有一个在代码中指定的错误ID:
$success = mysql_query(this_and_that);
if (!$success) log_error ("Failed Query: ".mysql_error(), "MYSQL_123");
错误记录在文件中,但更重要的是通过邮件发送给管理员,以及完整的回溯和变量转储。
为了避免邮件泛滥 - 该服务在美好的一天拥有成千上万的用户 - 每个错误代码只发送一次错误邮件每x小时。如果相同代码的错误在该时间跨度内发生两次,则不会发送其他邮件。这意味着记录了各种错误,但是当数百或数千个用户遇到错误消息时,您不会被错误消息杀死。
这很容易实现;艺术是正确的错误ID。例如,您可以在系统中为每个失败的mySQL查询提供相同的通用“MYSQL”错误ID。在大多数情况下,这将过于通用并且阻止太多。如果您为每个mySQL查询提供一个唯一的错误ID,您可能会收到邮件,并且过滤效果消失了。但是,当智能分组时,这可能是一个非常好的设置。
答案 4 :(得分:0)
从可用性的角度来看,用户不应该遇到错误。 根据错误,您应该制定不同的策略:
我知道这并不涵盖所有人,只是其他人建议的附录。