I work on a low-latency trading application. We'd like to increase the amount of lof4j logging that we write to file, whilst minimising the impact on our end-to-end processing time.
What is the recommended way of doing this? I think FileAppender.append is synchronous, so we need to do something a bit smarter than that....
Mule runtime engine (Mule) 4 uses Log4j 2 asynchronous logging by default, so the logging operation happens in a separate thread from the message processing, and the latter can continue without having to wait for the log operation to complete.
In synchronous logging, the data is directly written to the destination i.e a file or a database. In Asynchronous logging, the data is written to a queue first and then to the destination.
Yes, it's synchronous by default.
bear in mind that AsyncAppender
adds a thread per appender & that increasing the amount of logging you do may mean a substantial increase in the amount of string concatentation going on which often means a substantial amount of string processing/munging/formatting which can be pretty expensive (relative to the latency involved in a low latency trading app anyway).
If you need to log from a multithreaded application slf4j and its implementation logback are much better choice.
Yes, the appenders are synchronous. You want something like this:
http://www.spartanjava.com/2009/asynchronous-logging-with-log4j/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With