Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

jlrdw's avatar
Level 75

PHP log fatal errors

In a custom framework I ran across a problem, in short I am trying to log fatal errors.

An example I forget to comment out a line:

use Mini\Helpers\Yidas\widgets\PageOptions;  // this line
use Mini\Helpers\Yidas\widgets\Pagination as Yidas;
use Mini\Helpers\Cpager\Pager;
use Mini\Helpers\Cpager\PageOptions;

And this error wasn't logged in my error handler but in apache log:

PHP Fatal error:  Cannot use Mini\Helpers\Cpager\PageOptions as PageOptions because the name is already in use in C:\BitNami\wampstack-7.4.7-0\apache2\mini4up\application\view\dog\indexadmin.php on line 5, referer: http://localhost/mini4/admin/login

However if I do something like:

use Mini\Helpers\Cpager\Pagerz;   // bogus name

It's logged correctly.

I use the examples from php manual, I do have:

        set_exception_handler('Mini\Core\Logger::ExceptionHandler');
        set_error_handler('Mini\Core\Logger::ErrorHandler');

And in logger:

    public static function exceptionHandler(Throwable $e)
    {
        self::newThrowMessage($e);
    }

//// and

    public static function errorHandler($severity, $message, $file, $line)
    {
        if (!(error_reporting() & $severity)) {
            // This error code is not included in error_reporting
            return;
        }
        throw new ErrorException($message, 0, $severity, $file, $line);
    }
// right from php manual.

It works except for the fatal error. Anyone know how to tweak it to log fatal also?

0 likes
3 replies
jlrdw's avatar
Level 75

Still can't log fatal error in custom log, but I finally found a solution:

Of course have a shutdown:

register_shutdown_function('Mini\Core\Logger::fatal_handler');

Then:

    public static function fatal_handler()
    {
        $error = error_get_last();
        if (!is_null($e = error_get_last())) {
            print "Fatal error occurred,  notify Admin.";
        }
    }

Works for now, I'd still like to custom log a fatal error also.

1 like

Please or to participate in this conversation.