Lal 368 - Added abstraction for the logger

THe user of this struct has to know whether it is synchronous or not, beacuse in asynchronous mode, a callback does need to be passed. Otherwise there is no way to detect if an error has occurred. For example it would be good to know if the connection to the serivce has been lost.

It could be part of the underlying logging mechanism, but then the interface becomes explicitly esynchronous and the handling of asynchronous states becomes the backend's responsibility. That is acceptable for me to a certain extent, but let's be clear about it.