shealtiel
shealtiel

Reputation: 8388

PHP: Implications of a abrupt termination of a request by a *fatal* error

I'm experiencing a strange situation.

My application logs lot of trace logs to a file. (I don't know exactly how, I use my frameworks logger. Can check this though)

Problems is, when an application is terminated by a fatal error (only fatal) [example - "Fatal error: Call to a member function someFunction() on a non-object"] , I end up with no logs, even logs that should have been recorded much earlier during the execution of my script.

(Yes, I tried to flush logs, this doesn't help either. It looks like the termination of the application by a fatal error, somehow cancels writing to files done at earlier points of the application.

Any ideas what goes on here?

Thank you

Upvotes: 2

Views: 124

Answers (2)

shealtiel
shealtiel

Reputation: 8388

Apparently, the fatality of the fatal error that Pascal mentioned, is not 100% fatal.

The below allowed me to have my logs even on fatal errors:

function correctShutdown()
{
   logger->flush();
}

register_shutdown_function('correctShutdown');

Upvotes: 0

Pascal MARTIN
Pascal MARTIN

Reputation: 401132

A Fatal Error is... well... Fatal : it stops the execution of the script, which will not do anything that should have been done.


In your case, I suppose your logging framework logs into memory -- and that this in-memory log is only written to the file when the processing of the request is done.
Some logging mecanisms do that, to avoid writing to a file several times, at different points during the generation of the response (which means keeping the file locked, to avoid concurrency problems ; or opening-closing-reopening-reclosing-... it)

As you get a Fatal Error, the normal operation that should be done at the end of the response's generation is not called -- and, so, the in-memory log is not written to the file.

Now, the only way to know for sure would be to take a look at the logging mecanisms of your Framework ;-)

Upvotes: 3

Related Questions