Lal 368 - Added abstraction for the logger

As we discussed I think the first version should actually be synchronous. Asynchronous interfaces make error recovery much more difficult. We want to publish call to fail if we cannot send it and let the client deal with it.