Go to file
Gabi Melman f841f6c2a2 Update README.md 2014-11-23 00:49:42 +02:00
bench glog bench 2014-11-23 00:24:46 +02:00
example astyle 2014-11-22 10:29:06 +02:00
include/spdlog glog bench 2014-11-23 00:24:46 +02:00
.gitignore git ignore 2014-03-22 13:48:53 +02:00
INSTALL readme 2014-11-01 03:20:54 +02:00
LICENSE readme 2014-11-01 03:20:54 +02:00
README.md Update README.md 2014-11-23 00:49:42 +02:00
astyle.sh astyle+dos2unix 2014-03-22 14:11:17 +02:00

README.md

spdlog

Very fast, header only, C++ logging library.

Install

Just copy the files to your build tree and use a C++11 compiler

Tested on:

  • gcc 4.8.1 and above
  • clang 3.5
  • visual studio 2013
  • mingw with g++ 4.9.x

##Features

  • Very fast - performance is the primary goal (see becnhmarks below).
  • Headers only.
  • No dependencies.
  • Cross platform - Linux / Windows on 32/64 bits.
  • Variadic-template/stream call styles: logger.info("variadic", x, y) << "or stream" << x << y;
  • Custom formatting.
  • Multi/Single threaded loggers.
  • Various log targets:
    • Rotating log files.
    • Daily log files.
    • Console logging.
    • Linux syslog.
    • Easily extendable with custom log targets (just implement a single function in the sink interface).
  • Optional async logging .
  • Log levels.

Benchmarks

Below are some benchmarks comparisons under Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz:

Single thread bench

library log lines threads elapsed
boost log v1.56 1,000,000 1 4.207s
glog v0.3.3 1,000,000 1 1.077s
spdlog 1,000,000 1 0.975s

10 threads bench sharing same logger object between threads

library log lines threads elapsed
boost log v1.56 1,000,000 10 6.592s
glog v0.3.3 1,000,000 10 1.678s
spdlog 1,000,000 10 0.961s

Usage Example

#include <iostream>
#include "spdlog/spdlog.h"

int main(int, char* [])
{
    namespace spd = spdlog;

    try
    {
        std::string filename = "spdlog_example";
        auto console = spd::stdout_logger_mt("console");
        console->info("Welcome to spdlog!") ;
        console->info() << "Creating file " << filename << "..";

        auto file_logger = spd::rotating_logger_mt("file_logger", filename, 1024 * 1024 * 5, 3);
        file_logger->info("Log file message number", 1);

        for (int i = 0; i < 100; ++i)
        {
            auto square = i*i;
            file_logger->info() << i << '*' << i << '=' << square << " (" << "0x" << std::hex << square << ")";
        }

        // Change log level to all loggers to warning and above
        spd::set_level(spd::level::WARN);
        console->info("This should not be displayed");
        console->warn("This should!");
        spd::set_level(spd::level::INFO);

        // Change format pattern to all loggers
        spd::set_pattern(" **** %Y-%m-%d %H:%M:%S.%e %l **** %v");
        spd::get("console")->info("This is another message with different format");
    }
    catch (const spd::spdlog_ex& ex)
    {
        std::cout << "Log failed: " << ex.what() << std::endl;
    }
    return 0;
}