Change NSTimer to dispatch_after()

NSTimer requires a Runloop to get it dispatched properly. Since the
logging is done using dispatch blocks, there wont be any active
Runloops in that thread. So the timer is changed to a dispatch_after