如何让mediawiki通过电子邮件向我发送每个数据库错误?

时间:2011-04-11 21:42:58

标签: php mysql mediawiki

我正在寻找一个钩子或某种方式,以便在每次我在mediawiki上收到数据库错误时轻松发送电子邮件。我意识到我可能不得不将这个功能添加到他们的数据库类中,但我现在还不确定我是否应该这样做。

我不想要一个包含守护进程,crons或其他任何根据SQL查询日志读取和发送电子邮件的解决方案。

1 个答案:

答案 0 :(得分:1)

这样做的唯一可行方法是注册自定义异常处理程序。我们检查异常是否是数据库错误并相应地发送电子邮件。

我想出了这个简单的代码:

$wgHooks['SetupAfterCache'][] = 'onSetupAfterCache';
function onSetupAfterCache() {
    set_exception_handler( 'customExceptionHandler' );

    return true;
}

首先,我们必须设置一个钩子来注册我们的异常处理程序。如果我们在LocalSettings.php中进行了注册,则会被wfInstallExceptionHandler()覆盖。

function customExceptionHandler( $e ) {
    if( $e instanceof DBError ) {
        $from = new MailAddress( 'dberror@example.com' );
        $to = new MailAddress( 'personal.mail@example.com' );
        $body = 'A database error occured on My Wiki. Details follow:' . "\n\n" .
            $e->getText();

        UserMailer::send( $to, $from, 'Database error on My Wiki', $body );
    }

这里我们检查异常是否是由数据库引起的并发送电子邮件。您应该自定义$from$to$body变量。有关UserMailerMailAddress类的详细信息,请参阅文档。

    wfExceptionHandler( $e );
}

最后我们将异常传递给MediaWiki的处理程序,我们之前已经覆盖了它。它负责将错误输出给用户和其他重要的东西。