【问题标题】:How to do error logging in CodeIgniter (PHP)如何在 CodeIgniter (PHP) 中进行错误记录
【发布时间】:2011-03-13 16:40:24
【问题描述】:

我想在 PHP CodeIgniter 中记录错误。如何启用错误日志记录?

我有一些问题:

  1. 记录错误的所有步骤是什么?
  2. 如何创建错误日志文件?
  3. 如何将错误消息推送到日志文件中(无论何时发生错误)?
  4. 如何通过电子邮件将该错误发送到电子邮件地址?

【问题讨论】:

    标签: php codeigniter logging error-handling


    【解决方案1】:

    CodeIgniter 内置了一些错误记录功能。

    • 使您的 /application/logs 文件夹可写
    • /application/config/config.php 中设置
      $config['log_threshold'] = 1;
      或使用更大的数字,具体取决于您希望在日志中包含多少详细信息
    • 使用log_message('error', 'Some variable did not contain a value.');
    • 要发送电子邮件,您需要扩展核心 CI_Exceptions 类方法 log_exceptions()。您可以自己执行此操作或使用this。有关扩展核心的更多信息here

    http://www.codeigniter.com/user_guide/general/errors.html

    【讨论】:

    • 这有什么安全隐患吗?
    • 这会将数据转储到一个 php 文件,其文件名的格式为:log-[Y-m-d H:i:s] 或在配置文件中定义的 log_date_format 键配置上设置的任何值。只要您不记录/转储敏感数据,它应该是非常安全的。默认情况下,这个文件是相对于 index.html 页面的,所以很明显生成的 php 文件不会被公开访问——但你永远不会知道。如果您更改默认的应用程序/日志目录,请确保所有这些预防措施都到位。
    • 使您的 /application/logs 文件夹可写
    • 当我设置“$config['log_threshold'] = 1;”时,我的 /application/logs 文件夹中没有任何日志。但是,当我设置“$config['log_threshold'] = 3”时,会出现一个日志文件。希望这可以帮助。谢谢!和平。
    【解决方案2】:

    要简单地在服务器的错误日志中添加一行,请使用 PHP 的 error_log() 函数。但是,该方法不会发送电子邮件。

    首先,触发错误:

    trigger_error("Error message here", E_USER_ERROR);
    

    默认情况下,这将进入服务器的错误日志文件。请参阅 Apache 的 ErrorLog directive。设置您自己的日志文件:

    ini_set('error_log', 'path/to/log/file');
    

    请注意,您选择的日志文件必须已经存在并且可由服务器进程写入。使文件可写的最简单方法是使服务器用户成为文件的所有者。 (服务器用户可能是nobody、_www、apache 或其他,取决于您的操作系统发行版。)

    要通过电子邮件发送错误,您需要设置自定义错误处理程序:

    function mail_error($errno, $errstr, $errfile, $errline) {
      $message = "[Error $errno] $errstr - Error on line $errline in file $errfile";
      error_log($message); // writes the error to the log file
      mail('you@yourdomain.com', 'I have an error', $message);
    }
    set_error_handler('mail_error', E_ALL^E_NOTICE);
    

    请参阅relevant PHP documentation 了解更多信息。

    【讨论】:

      【解决方案3】:

      还要确保您已允许 codeigniter 在配置文件中记录您想要的消息类型。

      $config['log_threshold'] = [log_level ranges 0-4];

      【讨论】:

        【解决方案4】:
        In config.php add or edit the following lines to this:
        ------------------------------------------------------
        $config['log_threshold'] = 4; // (1/2/3)
        $config['log_path'] = '/home/path/to/application/logs/';
        
        Run this command in the terminal:
        ----------------------------------
        sudo chmod -R 777 /home/path/to/application/logs/
        

        【讨论】:

        • 给任何文件夹777权限是完全不安全的
        【解决方案5】:

        关于问题第 4 部分的更多信息 您如何将该错误通过电子邮件发送到电子邮件地址? error_log 函数也有电子邮件目的地。 http://php.net/manual/en/function.error-log.php

        啊哈,我在这里找到了一个显示用法的示例。 Send errors message via email using error_log()

        error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);
        

        【讨论】:

          猜你喜欢
          • 2012-03-08
          • 1970-01-01
          • 2019-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-01
          • 2012-05-22
          • 1970-01-01
          相关资源
          最近更新 更多