Version 1.3.0
Improvements
-
Upgraded to the latest and greatest fmt library version 5.3.0.
-
New API for default logger
spdlog::trace(..)
,spdlog::debug(..)
,spdlog::info(..)
, etc.
For convenience, spdlog now creates a default global logger (to stdout, colored and multithreaded).
It can be used easily by callingspdlog::info(..), spdlog::debug(..), etc
directly without any preparations.It's instance can be replaced to any other logger (shared_ptr):
spdlog::set_default_logger(some_other_logger); spdlog::info("Use the new default logger");
-
Alignment support in log patterns.
Each pattern flag can be aligned by prepending a width number(upto 128).
Use-
(left align) or=
(center align) to control the align side:align meaning example result %<width><flag>
Align to the right %8l
" info" %-<width><flag>
Align to the left %-8l
"info " %=<width><flag>
Align to the center %=8l
" info " -
Support for logging source filename, line number, and function name (thanks @possiblyhuman for contributing to this effort)
flag meaning example %@
Source file and line (use SPDLOG_TRACE(..),SPDLOG_INFO(...) etc.) my_file.cpp:123 %s
Source file (use SPDLOG_TRACE(..),SPDLOG_INFO(...) etc.) my_file.cpp %#
Source line (use SPDLOG_TRACE(..),SPDLOG_INFO(...) etc.) 123 %!
Source function (use SPDLOG_TRACE(..),SPDLOG_INFO(...) etc. see tweakme for pretty-print) my_func -
Support for compile time check of log levels using
#define SPDLOG_ACTIVE_LEVEL <level>
.
UseLOG_TRACE(..)
,LOG_DEBUG(..)
,LOG_INFO(..)
, etc. to enable.
Those macros check at compile time the log level and translate to empty statement if the log level is not high enough. Even if a log macro evaluate to a log call, the macro will check at runtime the level before evaluating its arguments.
So for example the following won't evaluatesome_costly_function()
because the logger's level is error:#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_DEBUG #include "spdlog/spdlog.h" .. spdlog::set_level(error); SPDLOG_DEBUG("Some costly arg: {}", some_costly_function());
-
Numerous small performance optimizations.
-
Global option that disables global registration of loggers
set_automatic_registration(bool)
. Thanks @pabloariasal (#892). -
Optimize logging of C strings by using
string_view
to avoid unnecessary copy. Thanks @peergynt (cb71fea). -
Use google benchmark to test latencies.
Fixes
logger::error_handler()
should be const (#881, thanks @shoreadmin for reporting)- Cleanup header file: remove log_msg.h include from fmt_helper.h. Thanks @peergynt (1b391cc)
- Fix log_msg constructor doesn't initialize all fields (#888. Thanks @curiouserrandy for reporting).
- Change
log_msg&&
tolog_msg&
params. Thanks @rwen2012 (794a636) - Fix typo in Android example. Thanks @zamazan4ik (f5a2725)
- Fix Compiling error VS2017 #902 (Thanks @JaNurz for reprting).
- Fix thread id is prefixed with zeros #908 (Thanks @klrakiranpradeep for reporting).
- Fix OSX build. Thanks @DanielChabrowski (c7f42d1).
- Fix and optimize usage of
fmt::internal::count_digits(..)
for better support 32/64 bits. Thanks @DanielChabrowski (c7f42d1, f1ab6fe). - Better handling of rotation errors (b64e446).
- Fix exceptions on file size calculation on Windows XP x64 and Windows Server 2003 x64. Thanks @lestera (#926).
- Do not attempt to default operator= when it is implicitly deleted. Thanks @dpacbach (63a475d).
- Make an implicit cast from int --> uint32_t explicit. Thanks @dpacbach (a6152eb).
- Enable testing in the Travis config file. Thanks @dpacbach (f5dc166).
- Fix the text alignment in the example. Thanks @bzindovic (d6086da4856df510657ffe4ef6b894e902b4b83).
- Fix typos. Thanks @peergynt (ce8cf1e).
- Fix handling of external fmt lib in cmake. Thanks @cneumann (084bc72).
- Fix VC WinRT compilation. Thanks @taniey for reporting (@948).
- Fix typo in file_helper.h. Thanks @brridder (fb702f9).