From 1e1bb1cd0fc73ce8c31b6994a960325e695005a8 Mon Sep 17 00:00:00 2001 From: Gabi Melman Date: Sun, 7 Dec 2014 06:01:10 +0200 Subject: [PATCH] Update README.md --- README.md | 92 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 42499d8f..3e6ac70e 100644 --- a/README.md +++ b/README.md @@ -49,48 +49,93 @@ Below are some [benchmarks](bench) comparing the time needed to log 1,000,000 li ## Usage Example ```c++ +/*************************************************************************/ +/* spdlog - an extremely fast and easy to use c++11 logging library. */ +/* Copyright (c) 2014 Gabi Melman. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +// +// spdlog usage example +// #include #include "spdlog/spdlog.h" +#include "spdlog/details/format.h" int main(int, char* []) { + namespace spd = spdlog; try { - std::string filename = "spdlog_example"; + std::string filename = "logs/spdlog_example"; + // Set log level to all loggers to DEBUG and above + spd::set_level(spd::level::DEBUG); + + + //Create console, multithreaded logger auto console = spd::stdout_logger_mt("console"); console->info("Welcome to spdlog!") ; - console->info("Creating file {}..", filename); + console->info("An info message example {}..", 1); + console->info() << "Streams are supported too " << 1; - auto file_logger = spd::rotating_logger_mt("file_logger", filename, 1024 * 1024 * 5, 3); - file_logger->info("Log file message number {}..", 1); - - for (int j = 1; j <= 10; ++j) - for (int i = 1; i < 10; ++i) - file_logger->info("{} * {} equals {}, i, j, i*j ); - + console->info("Easy padding in numbers like {:08d}", 12); console->info("Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}", 42); - console->infor("Supprot for floats {:03.2f}", 1.23456); - console->info("Positional args are {1} {0}..", "too", "supported): - + console->info("Support for floats {:03.2f}", 1.23456); + console->info("Positional args are {1} {0}..", "too", "supported"); + console->info("{:<30}", "left aligned"); console->info("{:>30}", "right aligned"); console->info("{:^30}", "centered"); - //see cppformat's full docs here: - //http://cppformat.readthedocs.org/en/stable/syntax.html - - // 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); + //Create a file rotating logger with 5mb size max and 3 rotated files + auto file_logger = spd::rotating_logger_mt("file_logger", filename, 1024 * 1024 * 5, 3); + file_logger->info("Log file message number", 1); - // 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"); + + spd::set_pattern("*** [%H:%M:%S %z] [thread %t] %v ***"); + file_logger->info("This is another message with custom format"); + + spd::get("console")->info("loggers can be retrieved from a global registry using the spdlog::get(logger_name) function"); + + SPDLOG_TRACE(file_logger, "This is a trace message (only #ifdef _DEBUG)", 123); + + // + // Asynchronous logging is easy.. + // Just call spdlog::set_async_mode(max_q_size) and all created loggers from now on will be asynchronous.. + // + size_t max_q_size = 1048576; + spdlog::set_async_mode(max_q_size); + auto async_file= spd::daily_logger_st("async_file_logger", "logs/async_log.txt"); + async_file->info() << "This is async log.." << "Should be very fast!"; + + // + // syslog example + // +#ifdef __linux__ + auto syslog_logger = spd::syslog_logger("syslog"); + syslog_logger->warn("This is warning that will end up in syslog. This is Linux only!"); +#endif } catch (const spd::spdlog_ex& ex) { @@ -98,4 +143,5 @@ int main(int, char* []) } return 0; } + ```