I think your questions relate to error handling in general, so you can find helpful answers in language agnostic questions.
1. Soldarnal answered question 1, and I would agree with pleasure - itโs a lot of work to try to catch every place where an error may occur, for example, interacting with a database, and it is better to have a global error handler that catches all errors and uses try / catch to places where there is a high probability of an error occurring, and you want to continue execution (usually, if your site cannot access your database, itโs a bit stuck).
2. With regard to logging, cflog is the most reliable, since you can almost always log into a file if you have no serious problems with your server. cfmail next - the server should queue any letters that it cannot send, although there it is no longer there. Further, cfhttp you can register your errors on an external site, although when sending an error it must be inserted, or you will lose it. Finally, you can enter the database, but then again, if it swallows.
You can use a combination, for example. register errors in the database if the database is unavailable, and then write to files and insert errors into the database when it is backed up.
3. If you track errors, for example. in the database or through an external service, you should be able to configure this to send email on the first error, or cfmail will allow you to send mail for all errors. We use a custom error handling script, but there may be some movement on the Internet.
Loftx source share