Skip to content

Releases: gabime/spdlog

Version 1.4.1

23 Sep 09:51
Compare
Choose a tag to compare

Fix few issues discovered by users of 1.4.0

  • Added pkgconfig file to CMake install - Thanks @orbea for reporting and fixing (#1237 #1238).
  • Fix regression in wchar support under windows. Thanks @Bak-Jin-Hyeong for reporting and fixing (#1239 #1240).
  • CMake: Do not install bundled fmt if SPDLOG_FMT_EXTERNAL is defined. Thanks @orbea (#1241).

Version 1.4.0

21 Sep 15:37
10578ff
Compare
Choose a tag to compare

Improvements

  • spdlog can now be compiled as a static or shared lib (thanks @DavidZemon for the help).
    Using the compiled lib improves greatly compile times when using spdlog and is very recommended.
    $ cd spdlog && mkdir build && cd build
    # Build is static lib (pass -DSPDLOG_BUILD_SHARED=ON for building as shared lib)
    $ cmake .. && make -j
  • Upgraded to the latest and greatest fmt library version 6.0.0. Thanks @tgpfeiffer (and to @vitaut for fmt!).
  • Support for -fno-exceptions (disabled by default). Enabling this will replace all throw() statements in spdlog with std::abort(). To enable, pass -DSPDLOG_NO_EXCEPTIONS=ON to CMake before building spdlog.
  • support for building spdlog with meson. Thanks @mensinda
  • Backtrace support - store debug/trace messages in a ring buffer to display later on demand. Very useful (thanks @MathijsV for the idea):
spdlog::enable_backtrace(32); // create ring buffer with capacity of 32  messages
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet.. 
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages
// or my_logger->dump_backtrace(32)..
  • Systemd support. Thanks @WarShoe (#1027)
  • Support for cleaning old files in daily_logger.
  • Numerous CMake build improvements. Thanks @DavidZemon , @jktjkt , @ksergey , @mnemotic , @cneumann , @dpacbach , @FrancoisChabot , @myd7349 , @matt77hias
  • Better support for various Unix BSDs (DragonFly, NetBSD, FreeBSD, OpenBSD). Thanks @jbeich (#1234)
  • Provide source location support for systemd sink. Thanks @jbelloncastro (#1122)
  • Added fmt::(w)string_view support. Thanks @matt77hias (#1139)
  • Add option to force color output without TTY . Thanks @psalz (#1175)
  • Add more overloads to spdlog::log and spdlog::logger::log. Thanks @sylveon (@1169)
  • Add public API spdlog::initialize_logger for create loggers manually. Thanks @tt4g (#1035)
  • Expose should_do_colors_ in ansicolor_sink.h. Thanks Florian Wörter (#1022)
  • Add tweak support for user short level names. Thanks @MFornander (#996)
  • Add method to filesinks to return filename. Thanks @markniebur (#978)
  • rotating_sink: Add option to rotate on open. Thanks @pwm1234 (#958)
  • Allow filename/line number at all levels. Add function name %! support. Thanks @possiblyhuman (#956)
  • New dups_filter sink -duplicate message removal sink. It will skip a message if previous one is identical and less than "max_skip_duration" old.
  • New '%o', '%i', '%u', '%O' format flags - Display elapsed time in mills/micros/nanos/seconds since previous message.
  • Some minor pattern formatter performance improvements.

Fixes

Version 1.3.1

18 Jan 10:25
Compare
Choose a tag to compare

Fix few issues found by 1.3.0 users:

Version 1.3.0

11 Jan 14:23
Compare
Choose a tag to compare

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 calling spdlog::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>.
    Use LOG_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 evaluate some_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());
  • CMake improvements. Thanks @dpacbach (85b4d7c, f5dc166 ).

  • 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&& to log_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).

Version 1.2.1

17 Oct 14:32
10e809c
Compare
Choose a tag to compare

This fixes a compilation error of dist_sink.h (#864) . Thanks @DimRochette !

Version 1.2.0

07 Oct 22:42
Compare
Choose a tag to compare

Improvements

  • Upgraded to latest fmt version 5.2.1.
  • Binary data logging using spdlog::to_hex(binary_data). Many types of std::container<char> can be logged in hex. See usage examples.
  • Added logger->clone() to ease the creation of new loggers from an existing one.
  • Numerous micro optimizations across the lib.
  • Added set_sinks method to dist_sink for atomic updating set of sinks in dist_sink. Thanks @jwnimmer-tri .
  • Improved CmakeLists.txt to better handle third-party usage. Thanks @taketwo .

Fixes

  • Fixed wchar logging (supported only in windows. #851 , #764).
  • Fixed registry test. Thanks @DanielChabrowski .
  • Removed invalid files from tests.sln. Thanks @yhchen .
  • Some fixes to console_globals.h includes. Thanks @DanielChabrowski
  • Don't deny access to log files from other processes under windows. Thanks @eruiz.
  • Pessimizing move remove. Thanks @maciekgajewski
  • ansicolor_sink.h - add missing sink include. Thanks @AlexanderDalshov .
  • Improved rotating sink error handling.
  • Fixed Readme. Thanks @blackball .
  • Fixed some clang tidy warnings.

Version 1.1.0

15 Aug 16:42
Compare
Choose a tag to compare

Bug fixes

  • Fixed android sink compilation. Thanks @rajesh-p .
  • Fixed race condition in async-factory.
  • Fixed bug in spdlog_ex implementation .Thanks @gajanak for reporting.
  • Fixed race condition in the unit tests.
  • Fixed compiler warnings under OSX. Thanks @baishuai .

Improvements

  • Some micro optimizations.
  • Improve and fix CMake issues. Thanks @DanielChabrowski .
  • Improve and fix travis-ci issues. Thanks @DanielChabrowski .
  • Added overrun_counter() to the async thread pool queue - returns # of messages overrun under the overrun_oldest mode. Thanks @indiosmo .
  • Fixed some clang tidy warnings.

Version 1.0.0

05 Aug 00:00
Compare
Choose a tag to compare

Version 1.0.0 is a major release with numerous features and improvements.
It contains some breaking API changes that are not compatible with 0.x versions (see below).

Highlights

  • Include what you need: Reduce compilation times by including only the minimum required. Users can now to include only the actual sinks/features they need from spdlog/sinks folder.

  • Upgrade to fmt lib version 5.1 - thanks @vitaut for this great lib.

  • Support for custom formatting per sink - each sink can have it's own formatting and level using sink->set_pattern(..) or sink->set_formatter(..).

  • async logging - thread pool - async loggers now share a global thread pool by default.
    Creating and destroying async loggers is cheap now. This is in contrast to previous versions were creating async loggers was expensive, since each logger instance had its own worker thread and queue.
    The global thread pool and can be configured using spdlog::init_thread_pool(queue_size, worker_threads) or created directly using make_shared.

  • periodic flusher: spdlog::flush_every(seconds) to periodically flush all registered loggers.

  • Improved performance - by caching some recently used values in the pattern formatter.

  • Ability to add sinks to a logger after its creation (but it is not thread safe to do so - so use with caution).

Breaking changes

  • Include what you need. For example to use basic_logger add #include "spdlog/sinks/basic_file_sink.h" (see example in readme).

  • To use async loggers - include "spdlog/async.h"

  • Replaced set_async_mode(..) with factory template. For example:

 auto logger= spdlog::rotating_logger_mt<spdlog::async_factory>(...);
  • Removed printf support.

  • Removed warmup/teardown functions from async.

  • Custom sinks inheriting from sinks::base_sink need to format (if needed) the message before sending to their target. For example

void sink_it_(const details::log_msg &msg) override
{
  fmt::memory_buffer formatted;
  sink::formatter_->format(msg, formatted);
  // sink the formatted
  ...   
}
  • Added clone() virtual function to the formatter interface.

  • Removed support for #define SPDLOG_NO_REGISTRY_MUTEX

Change log

See here the complete list of changes.

Version 0.17.0

21 May 18:03
Compare
Choose a tag to compare

Summary

  • Improvements in color output impl - thanks @Qix-
  • Fixed spelling - thanks @rcarmich
  • New function to convert level_enum from string - thanks @fegomes
  • Support for custom EOL per formatter - thanks Emad William Farag
  • Make set_color public in wincolor_sink to retain configurability - thanks Benjamin Schindler
  • Fix compilation error with GCC 8 - thanks @ColinDuquesnoy
  • CMake improvements - thanks @DanielChabrowski , @grzadr and @yisonPylkita
  • Bumped bundled fmt version to 4.1.0
  • Fixed tests for older gcc compilers
  • Moved to clang source code formatter - thanks @DanielChabrowski
  • Fixed many clang-tidy warnings - thanks @DanielChabrowski
  • Fix implicit conversion warnings - thanks @tbastos
  • Added Added: g3log, log4cplus, log4cpp, p7. Changes: boost, easylogging, g2log to bench - thanks @kasru
  • Support for color formatting. using the %^ and %$ format flags.
  • Added new sink to contrib: step_logger - thanks @Puasonych
  • Replaced the lockfree queue with bounded, locked queue - this greatly improves CPU usage and memory footprint in async mode (with some cost to latency due to the mutex locking).

Version 0.16.3

12 Jan 12:39
Compare
Choose a tag to compare

Summary

  • Fix sleep issue (#609) under MSVC that happens when changing the clock backwards (pull #610) - Thanks @joaomoreno
  • Ensure that marcos always expand to expressions (pull #604) - Thanks @sam-lunt
  • Add global flush_on function (pull #605) - Thanks @sam-lunt
  • Fix conversion warning (#595, pull #596) - Thanks @Broekman