A high-performance asynchronous C++ logging library designed for low-latency, performance-critical applications.
Quill is an asynchronous logging library for C++ designed to deliver high performance and minimal latency in real-time, performance-critical applications. It solves the problem of logging overhead by offloading formatting and I/O to a background thread, ensuring that the main application thread remains fast and responsive.
C++ developers building low-latency systems such as financial trading platforms, game engines, embedded systems, and high-frequency applications where logging performance directly impacts overall system efficiency.
Developers choose Quill for its benchmark-proven low latency, rich feature set, and reliability in production environments. It offers a compelling alternative to other logging libraries by combining asynchronous design with extensive customization options while maintaining exceptional performance.
Asynchronous Low Latency C++ Logging Library
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Quill consistently shows nanosecond-level latency in benchmarks, outperforming libraries like spdlog and Boost.Log, with 95th percentile times as low as 9ns for number logging in single-threaded scenarios.
It offloads formatting and I/O to a background thread via SPSC lock-free queues, ensuring the main thread remains responsive, which is critical for real-time applications.
Includes advanced capabilities like backtrace logging with a ring buffer, crash handling via built-in signal handlers, multiple sink types (console, file, JSON), and configurable queue modes with monitoring.
Extensively tested on Linux, Windows, macOS, and BSD with CI badges, and supports Android via AndroidSink, making it suitable for diverse production environments.
The README explicitly warns that Quill does not work well with fork() due to its multithreaded design, requiring manual re-initialization in child processes and separate log files to avoid conflicts.
It depends on external libraries like {fmt} for type-safe formatting, which can increase project complexity or lead to dependency conflicts in tightly controlled environments.
While simple setup is straightforward, fine-tuning options like queue modes, custom formatters, and sink configurations requires a deeper understanding of the Backend and Frontend APIs, adding learning curve.