What you need:
- an asynchronous design where both the formatting and the writing to disk can happen on another thread.
- a lockfree buffer using pre-allocated memory. In particular every log record might be of different size.
- the ability to control where/when to drain that buffer, perform formatting and write data to disk (no good library should impose a threading model, needs to be able to cooperatively run with other tasks on one thread)
- an extensible and fast binary serialization/deserialization scheme -- easiest is to rely on simple copy construction as a default.
Most libraries focus on silly things like formatting and filtering which are all trivial problems.