There are many ways to do it.
You could use one (or more) blocking queues for that. Produces send messages to the queue and you can have a listener that reads them from the queue.
You could also use a ITopic for that, so you can have multiple listeners for the same stream of log events.
But be careful with the granularity of logging. Logging in itself can be expensive due to object creation, but it will also put a lot of pressure on the cluster if you send many little messages.
A bad solution can be implemented in no time. So make sure that you have got your specifications clear and do benchmarking from day one so that you are not shooting yourself in the foot.