Howe to make sure that everything is logged to file


I use the default configuration for logging, which logs everything to protected/runtime/application.log and rotating to .log.1, .log.2 and so on.

I am 100% sure that at random times some traces are not being logged. It seems to happen when multiple requests are processed at the same time and I guess that’s because one of them cannot write to the file because it is being written by the other one.

While the event that two requests are processed that much simultaneously may seem very unlikely, it isn’t at all because I use touchUrl() (from the extension ERunActions), so in the process of processing a request my application touches an url which starts another request that gets processed at the same time while the first one finishes.

Is there a way to ensure that absolutely EVERYTHING gets logged?

This should be possible. I guess the logger tries to open the file, and if it can’t, it just drops the logging. But it could as well block waiting for the file to be accessible. I guess that’s not the default behavior because it would impact performance, but is it possible through some configuration option?

Or do I have to drop the file logroute in favor of a DB log route? Will that have a huge impact on performance?



Oh sh… no, that’s not the case.

It seems that what’s happening is the same as I described here:

when a script is executed via touchUrl() and some error is encountered during execution (even non-fatal) for some reason nothing at all is logged.