Releases: odygrd/quill
Releases · odygrd/quill
v1.6.0
New Features
- Dual queue mode offering even lower latencies on hot paths. See Dual Queue Mode.
- Added a signal handler for linux and windows. The signal handler flushes the log when the app crashes or exits. (#1)
- Added support for custom handlers. (#75)
- Quill now compiles and runs on Cygwin.
Improvements/Fixes
- The queue from the caller to the backend worker thread has been reworked. The new queue generates slightly better assembly than the previous one. Quill does no longer depend on mapping the same region of physical memory twice.
- Replaced an assertion check that could trigger incorrectly. (#68)
- Fixed build on
ARM_ARCH < 6
. (#78) - Fixed compile errors when
QUILL_NOEXCEPTIONS
,CMAKE_CXX_STANDARD 20
,QUILL_USE_BOUNDED_QUEUE
are set. - The unit tests have been moved to a separate binary with their own
main()
. This increased build times when building the tests, but the failures are now easier to debug on different CI platforms and the tests can also run faster in parallel. - Fixed minor compiler warnings on windows.
- Upgraded bundled libfmt to
7.1.3
- Updated readme benchmarks section for v.1.6.0
Note
- If a custom queue capacity is defined using
#define QUILL_QUEUE_CAPACITY
after1.6.0
the whole library needs to be recompiled.
v1.5.2
v1.5.1
v1.5.0
- Upgraded bundled libfmt to
7.1.2
- Added
Filters
. The filter class can be used for filtering log records. Filters can be added to handler instances. See example_filters.cpp - It is now possible to set the log level severity on the handler objects. See example_filters.cpp (#49)
- Timestamp formatting optimisation for the backend worker thread.
- Free list allocator optimisation for the backend worker thread.
- Fixed PatternFormatter ignoring a portion of the pattern was ignored, when no format specifiers were present. (#56)
- When
%(function_name)
is used in PatternFormatter the namespace delimiter is replaced from::
to.
(Windows only). (#61) - Arguments passed to the logger are no longer being evaluated when the log statement is not logged. (#67)
- PatternFormatter enhancement. It is now possible to pass {fmt} string syntax to
QUILL_STRING
. The default PatternFormatter string has been changed to:"%(ascii_time) [%(thread)] %(fileline:<28) LOG_%(level_name) %(logger_name:<12) - %(message)"
. This results to the following log being properly aligned despite the different lengths of each filename and logger name.
22:31:07.995438465 [2666041] file1.h:11 LOG_INFO logger1 - Log from file.
22:31:07.995445699 [2666041] long_file2.h:11 LOG_INFO logger_fl2 - Log from other file.
22:31:07.995457144 [2666041] a_longer_file_3.hpp:11 LOG_INFO logger_fl2_l - Log from other file.
22:31:07.995462471 [2666041] example_trivial.cpp:30 LOG_TRACE_L3 root - This is a log trace l3 example 1
v1.4.1
v1.4.0
- Added support for printing colour codes in the terminal. See ConsoleHandler
- RotatingFileHandler improvements and minor change in API. See RotatingFileHandler
- DailyFileHandler is removed and replaced by TimeRotatingFileHandler. See TimeRotatingFileHandler
- Added backtrace logging. Log messages can be stored in a buffer and flushed later on demand. See Backtrace Logging
- Added bundled
doctest
2.4.0
- Migrated all tests from
gtest
todoctest
. - Upgraded bundled libfmt to
7.0.3
v1.3.3
v1.3.2
v1.3.1
v1.3.0
New Features
- Added option
QUILL_NO_EXCEPTIONS
to disable exceptions, std::abort() is called instead of an expection. (#16) - Exceptions thrown in the backend worker thread, will now call a user provided error handler callback to handle the error. (#21)
- Compile time checks for unsafe to copy user defined types. Non trivial user defined types must be explicitly tagged as safe to copy with the use of
QUILL_COPY_LOGGABLE;
. Otherwise they have to be formatted and passed as a string to the logger by the user. The old unsafe mode is still usable by#define QUILL_MODE_UNSAFE
(#20) - Added
QUILL_USE_BOUNDED_QUEUE
. In this mode no new queues get allocated but instead log messages get lost. Number of lost messages is reported to stderr. - Minor hot path optimisation. The pointer to the metadata for each log message is no logger copied to the queue but passed as a template argument instead.
- Added a latency benchmark, easily extendable for any logger
Improvements/Fixes
QUILL_RDTSC_CLOCK
option is replaced byQUILL_CHRONO_CLOCK
which is by OFF by default.- Improve compiler error message when trying to log a non copy constructible user defined type
- Fix buffer reallocation bug on TimestampFormatter. In previous versions any timestamp format set to
set_pattern
expanding to a string longer than 32 bytes would cause a crash. (#24) - The backend logging thread will now copy all messages from the SPSC queue to a local priority queue. This keeps the SPSC less empty avoiding a potential allocation on the hot path.
std::string_view
is now promoted tostd::string
to take a deep copy- The queue capacity has been moved from
config
toTweakme.h
. - Multiple formats patterns support for
stdout
andstderr
handlers. See example_stdout_multiple_formatters.cpp quill::start()
will now block until the backend worker has started.- Upgraded bundled libfmt to
6.2.1