We have that in every one of our Sprocs, regardless.I appreciate that it would be a lot of work to retro fit, and there are no doubt other ways to get Stats on how-often-do-they-run, but we find logging from within each Sproc incredibly useful.
We had an expectation that the additional load would be a burden on the server (our logging table is very large, and requires millions of deletes a day to purge the stale data (we hold it for 7 days), but on the one occasion when user-load brought a server to its knees (eCommerce site in the run up to Christmas, so we had the excess load every night for a couple of weeks and were able to experiment !!!) the first thing we did was to disable the logging and it made no appreciable difference - which was pleasing. (That said we have got a switch in the logging procedure that turns it off, so we still get the "call" to log, but a small modification of the log SProc causes it to just do a return unless the caller provides a "Must log me" flag)
We pass a parameter which is a concatenation of all the parameters, the log SProc returns the log record's ID and the Sproc calls a "Finished" SProc (with the ID and any error return value / message) for the log record to be updated.
All our APPs are public-facing websites, so no chance to "trot round and look over the shoulder of a user", unlike the old desktop-app days ... so any failures in the field require us to do a post-mortem to see exactly what the user did. Together with logging which pages they viewed in their session being able to see every Sproc called, and its parameters, allows us to reverse engineer exactly what they did.
A report of "Logged the start but not the finish" and also "Logged an error return value" is viewed in real time during the day so that we see if anything is (i.e. "has become") broken. Might be that as THROW/CATCH has improved (our code methodology pre-dates any of that) such that things are now better [although hard to properly test such code, in every SProc, is watertight], but we don't have to be that vigilant within each SProc: if it fails to finish we can report on that, along with it finishing with an error returned to APP/Caller.
During DEV our APPs use the logging data to display in the page (as a diagnostic popup) to see what SQL calls were made, and so on. (That includes calls by Sprocs to other SProcs, not just the initial call)
Stats reports show number of calls / average run time, but also how average run time changes over time. We have used it to recompile sprocs, automatically, during busy periods as soon as they trip over a threshold, as a band-aid whilst sorting out the underlying problem, and so on.