创建服务器日志

时间:2015-04-05 03:38:55

标签: php

我正在一个相当大的网站上工作,我需要记录用户在使用网站时可能遇到的错误。

以下是它的工作原理:

>if operation passed
     #operation success
>else
     #Log the failure

日志()

>email admin
>create log

我需要知道的是创建此日志的最佳做法,因为有几种方法可以实现此目的。

text based
database

这样做可能有更好的方法,这就是我要求堆栈溢出的原因。

告诉我你将如何做到这一点,我将自己做其余的研究和编码。

3 个答案:

答案 0 :(得分:0)

我发现使用像airbrake.io或pagerduty.com这样的第三方服务是最好的。基本上,他们处理创建故障单并记录所有内容以及向合适的人员通知事件。是的,您可以通过向管理员发送电子邮件并创建自己的日志来按照您提及的方式编写自己的系统...但是您还必须担心更新电子邮件列表并在合适的时间通过电子邮件发送给合适的人员...如果你在度假怎么办?那时谁将收到电子邮件?第三方服务为您管理所有这些。

答案 1 :(得分:0)

您可以使用(并且可能应该使用)您正在使用的语言的开源日志记录框架。它们将为您提供所有日志记录需求的好包装,大多数都可以选择通过电子邮件发送日志(甚至上传文件到远程目录)。

如果您希望创建自己的日志记录系统,我个人会这样做:

  • 制作log目录
  • 使用命名方案每小时(或一天或X个时间单位)创建一个日志文件(纯文本)
  • 用时间写1行文件,然后写一些分隔符,然后错误(包括错误代码/消息等)

每经过一小时或一天,您都会创建一个新文件并将以前的文件通过电子邮件发送给自己(或管理员)。您还可以立即发送致电错误/问题的电子邮件。我不会亲自使用数据库。

我为与游戏服务器通信的在线脚本实现了这样的日志记录系统。最终结果是每天每小时填充日志的文件目录。超过30天的文件也会被删除。它允许我检查事情的进展情况,并确定游戏服务器上玩家体验的某些事件/问题。但是,我只编写了自己的记录器,因为没有脚本可以为我的游戏做到这一点。

答案 2 :(得分:0)

首先,由于评论中提到过,我们应该将php错误日志与自定义应用程序日志区分开来:

php错误日志在解释您的php文件时记录某个级别的错误(通知,错误,警告取决于您的error_reporting()设置)。这意味着当您尝试使用未设置的数组键之前,将生成警告并将其打印到屏幕或记录到您的php错误日志文件中。

另一方的自定义应用程序记录器记录自定义消息,这些消息可能包含有关应用程序逻辑的警告和错误,并且可以由应用程序处理。

当我们比较以下两个代码示例时:

<?php

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', sys_get_temp_dir() . '/php_error.log');

updateUser($_POST['user_id']);

// Assuming $_POST['user_id'] was not set the above lines would produce a notice in your php_error.log stating the use of an undefined index 'user_id'

?>

反对:     

// Instantiate your own logger or a 3rd party logger
$myLogger = new Logger(sys_get_temp_dir() . '/application.log');

if (!array_key_exists('user_id', $_POST)) {

    $myLogger->error('Cannot update user since user_id was not set');

    // Handle the error in the UI accordingly
    header('Location: 404.php');
    die();

}

updateUser($_POST['user_id']);

?>

对于我个人来说,将不同日志文件中的这两种错误分开是有意义的:php错误通常是代码的结果,它不能处理所有可以想象的情况(即用户手动从表单中删除隐藏的user_id字段并且暗示您应该更改代码以避免下次出现相同的错误。 第二段代码处理完全相同的用例,但您在编写代码时考虑了这种情况,应用程序能够以某种方式做出反应。

无论您决定选择第三方记录器还是编写自己的记录器:当您决定从基于文件的记录切换到数据库时,请考虑使用满足PRS-3 logging standard的记录器来使其成为可更换的记录器基于记录机制。通过这样做,当您决定切换记录器时,您不必更改大量代码,因为方法和一般用法是标准化的。

编写自己的记录器时,请考虑以下几点:

  • 在写入日志文件时锁定和解锁日志文件
  • 日志轮换(每日,每周,每月)
  • 删除旧日志文件
  • 如上所述,考虑实施PSR-3