If I don't catch an exception in PHP, I get a helpful error message in my error.log
file with a stack trace. For example, if I run:
<?php function foo() { throw new Exception('Oh no!'); } foo(); ?>
then I get this written to my logs:
[Wed Mar 06 10:35:32 2013] [error] [client 86.146.145.175] PHP Fatal error: Uncaught exception 'Exception' with message 'Oh no!' in /var/www/test.php:4\nStack trace:\n#0 /var/www/test.php(7): foo()\n#1 {main}\n thrown in /var/www/test.php on line 4
Sometimes I'd like to catch the exception but still log that detail. I'm imagining something like:
<?php function foo() { throw new Exception('Oh no!'); } try { foo(); } catch (Exception $e) { log_exception($e); } ?>
where log_exception
will write to the error log something in basically the same format as what gets automatically written for an uncaught exception - perhaps literally identical besides having Caught exception
instead of PHP Fatal error: Uncaught exception
.
Is there a built-in function to log exception info like this, or to capture it to a string? I'm imagining something analagous to traceback.format_exc()
in Python.
error_log($e);
does what you want. It logs exactly the same thing that would have been logged if you didn't catch the exception, minus the word 'Uncaught' at the beginning. It does this because that's what the Exception
class's __toString()
magic method returns.
You can do this in a catch
block:
try { foo(); } catch (Exception $e) { error_log("Caught $e"); }
Or in the exception handler:
set_exception_handler(function($exception) { error_log($exception); error_page("Something went wrong!"); });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With