Logging and tracing
Historically, logging had quite high importance in enterprise applications. We have seen a lot of logging framework implementations and supposedly best practices on how to implement reasonable logs.
Logging is typically used for debugging, tracing, journaling, monitoring, and outputting errors. In general, all information that developers consider somewhat important, but not made apparent to the users, is been placed into logs. In almost all cases, this includes logging to files.
Shortcomings of traditional logging
This approach, which is way too common in enterprise projects, comes with a few problems.
Performance
Traditional logging, especially extensively used logging invocations, creates a lot of string objects. Even APIs such as Slf4J that aim to reduce unnecessary string concatenation will result in high memory rates. All these objects need to be garbage collected after their use, which utilizes the CPU.
Storing log events as string messages is a verbose way of storing...