Many places in the code used Log.Error(err.Message) or equivalent which
strips out all the really useful information, such as the stack trace
and inner exceptions. Using Log.Error(exception) is the correct way to
log an error as it will correctly write all the message details, also,
by passing the full Exception object we can improve the logging in this
one place and all call sites will automatically benefit from the improvements
Using "local":true for ConsoleLogHandler, false for FileLogHandler, we can later override this with an MEF implementation and be specified by type name like the other MEF plugins.
Improved FileLogHandler to be thread safe and have non-async flush operations