在CodeIgniter中禁用特定帮助程序/库的错误日志记录

时间:2012-08-05 00:21:17

标签: codeigniter logging mpdf

我正在使用mPDF类从HTML生成PDF。

虽然PDF显示的确如此,但我的CodeIgniter错误日志中包含错误通知,似乎是由于mPDF中的某些错误。

由于这些通知是无害的并且PDF完美无缺,所以我想要的是在运行此类时专门禁用CodeIgniter错误记录。

但我还没有办法做到这一点。

这是我的代码:

CONTROLLER

$this->load->helper('mpdf');
mpdf($html, $filename);

HELPER(mpdf_helper.php)

function mpdf($html, $filename) 
{
    $CI =& get_instance();
    $CI->config->set_item('log_threshold', 0);
    include('mpdf/mpdf.php');

    $mpdf=new mPDF('', 'letter');
    $mpdf->SetHTMLHeader('powered by example.com');
    $mpdf->WriteHTML($html, 0);
    $mpdf->Output($filename, 'I');
}

正如您所看到的,我正在尝试手动将log_threshold的配置设置为0,但这不会阻止错误记录。

仅供我index.php

define('ENVIRONMENT', 'production');

设置error_reporting(0)

你知道我应该做些什么来阻止CodeIgniter只在我运行mPDF时记录错误吗?

错误示例

ERROR - 2012-08-04 23:03:59 --> Severity: Notice  --> Undefined index: direction /var/www/vhosts/asd.com/httpdocs/application/helpers/mpdf/mpdf.php 21103

ERROR - 2012-08-04 23:06:07 --> Severity: Notice  --> Undefined index: MARGIN-TOP /var/www/vhosts/asd.com/httpdocs/application/helpers/mpdf/mpdf.php 17271

1 个答案:

答案 0 :(得分:3)

这是因为codeigniter的错误记录与set_error_handler挂钩,而php将触发处理程序,无论error_reporting值是什么。正如php手册所说:

  

...但是你仍然可以读取error_reporting的当前值并采取适当的行动。

CI的默认错误处理程序不会执行日志记录(但会显示错误),just logs everything that comes in如果CI的内部错误级别需要记录。 (由{php}错误处理程序调用的log_threshold配置值1,see the function。)

如果要使CI记录器尊重error_logging级别,可以使用standard method扩展CI_Exception类,如下所示:

class MY_Exceptions extends CI_Exceptions {
    function log_exception($severity, $message, $filepath, $line) {
        $current_reporting = error_reporting();
        $should_report = $current_reporting & $serverity;

        if ($shoud_report) {
            // call the original implementation if we should report the error
            parent::log_exception($severity, $message, $filepath, $line);
        }
    }
}

一旦你完成了这项工作,你就可以在你的图书馆电话中或在你的图书馆电话中使用error_reporting。