diff --git a/bench/spdlog-async.cpp b/bench/spdlog-async.cpp index 7307f39c..93a0ed07 100644 --- a/bench/spdlog-async.cpp +++ b/bench/spdlog-async.cpp @@ -19,9 +19,9 @@ int main(int argc, char* argv[]) int thread_count = 10; if(argc > 1) thread_count = atoi(argv[1]); - int howmany = 1000000; + int howmany = 10000001; - spd::set_async_mode(1048576); + spd::set_async_mode(1048576*16, spd::async_overflow_policy::discard_log_msg); auto logger = spdlog::create("file_logger", "logs/spd-bench-async.txt", false); logger->set_pattern("[%Y-%b-%d %T.%e]: %v"); diff --git a/example/example.cpp b/example/example.cpp index af76966e..44f6c0bf 100644 --- a/example/example.cpp +++ b/example/example.cpp @@ -37,7 +37,7 @@ int main(int, char* []) spd::set_level(spd::level::debug); // Create console, multithreaded logger - auto console = spd::stdout_logger_mt("console"); + auto console = spd::stdout_logger_mt("console"); console->info("Hello {}", 1); console->info("An info message example {}..", 1); console->info() << "Streams are supported too " << 1; @@ -65,7 +65,7 @@ int main(int, char* []) SPDLOG_TRACE(console, "Enabled only #ifdef SPDLOG_TRACE_ON..{} ,{}", 1, 3.23); SPDLOG_DEBUG(console, "Enabled only #ifdef SPDLOG_DEBUG_ON.. {} ,{}", 1, 3.23); - + // Asynchronous logging is very fast.. // Just call spdlog::set_async_mode(q_size) and all created loggers from now on will be asynchronous.. size_t q_size = 1048576; //queue size must be power of 2 @@ -94,7 +94,10 @@ int main(int, char* []) // Example of user defined class with operator<< // class some_class {}; -std::ostream& operator<<(std::ostream& os, const some_class&) { return os << "some_class"; } +std::ostream& operator<<(std::ostream& os, const some_class&) +{ + return os << "some_class"; +} void custom_class_example() { diff --git a/include/spdlog/details/async_log_helper.h b/include/spdlog/details/async_log_helper.h index 4d8102a1..14628f1e 100644 --- a/include/spdlog/details/async_log_helper.h +++ b/include/spdlog/details/async_log_helper.h @@ -107,8 +107,9 @@ public: void log(const details::log_msg& msg); - //Stop logging and join the back thread + // stop logging and join the back thread ~async_log_helper(); + void set_formatter(formatter_ptr); @@ -137,11 +138,11 @@ private: // worker thread main loop void worker_loop(); - //pop next message from the queue and process it - //return true if a message was available (queue was not empty), will set the last_pop to the pop time + // pop next message from the queue and process it + // return true if a message was available (queue was not empty), will set the last_pop to the pop time bool process_next_msg(clock::time_point& last_pop); - // guess how much to sleep if queue is empty/full using last successful op time as hint + // sleep,yield or return immediatly using the time passed since last message as a hint static void sleep_or_yield(const clock::time_point& last_op_time); }; @@ -210,8 +211,8 @@ inline void spdlog::details::async_log_helper::worker_loop() } } -// Process next message in the queue -// Return true if this thread should still be active (no msg with level::off was received) +// process next message in the queue +// return true if this thread should still be active (no msg with level::off was received) inline bool spdlog::details::async_log_helper::process_next_msg(clock::time_point& last_pop) { @@ -243,7 +244,7 @@ inline void spdlog::details::async_log_helper::set_formatter(formatter_ptr msg_f } -// Sleep,yield or return immediatly using the time passed since last message as a hint +// sleep,yield or return immediatly using the time passed since last message as a hint inline void spdlog::details::async_log_helper::sleep_or_yield(const clock::time_point& last_op_time) { using std::chrono::milliseconds; @@ -251,7 +252,7 @@ inline void spdlog::details::async_log_helper::sleep_or_yield(const clock::time_ auto time_since_op = clock::now() - last_op_time; - //spin upto 1 ms + // spin upto 1 ms if (time_since_op <= milliseconds(1)) return; @@ -267,7 +268,7 @@ inline void spdlog::details::async_log_helper::sleep_or_yield(const clock::time_ return sleep_for(milliseconds(100)); } -//throw if the worker thread threw an exception or not active +// throw if the worker thread threw an exception or not active inline void spdlog::details::async_log_helper::throw_if_bad_worker() { if (_last_workerthread_ex) diff --git a/include/spdlog/details/pattern_formatter_impl.h b/include/spdlog/details/pattern_formatter_impl.h index b904d32d..e231b4d8 100644 --- a/include/spdlog/details/pattern_formatter_impl.h +++ b/include/spdlog/details/pattern_formatter_impl.h @@ -490,7 +490,7 @@ inline void spdlog::pattern_formatter::handle_flag(char flag) case 'L': _formatters.push_back(std::unique_ptr(new details::short_level_formatter())); break; - + case('t') : _formatters.push_back(std::unique_ptr(new details::t_formatter())); break; diff --git a/include/spdlog/spdlog.h b/include/spdlog/spdlog.h index 497a6f49..3af3ad57 100644 --- a/include/spdlog/spdlog.h +++ b/include/spdlog/spdlog.h @@ -55,7 +55,7 @@ void set_pattern(const std::string& format_string); void set_formatter(formatter_ptr f); // -// Set global logging level for +// Set global logging level for // void set_level(level::level_enum log_level); @@ -69,7 +69,7 @@ void set_level(level::level_enum log_level); // async_overflow_policy::block_retry - if queue is full, block until queue has room for the new log entry. // async_overflow_policy::discard_log_msg - never block and discard any new messages when queue overflows. // -// worker_warmup_cb (optional): +// worker_warmup_cb (optional): // callback function that will be called in worker thread upon start (can be used to init stuff like thread affinity) // void set_async_mode(size_t queue_size, const async_overflow_policy overflow_policy = async_overflow_policy::block_retry, const std::function& worker_warmup_cb = nullptr);