8#ifndef ZCLIBLOG_LOGGER_ASYNC_HPP
9#define ZCLIBLOG_LOGGER_ASYNC_HPP
12#include <condition_variable>
21#if ZCLIBLOG_LOGGER_CONFIGURATIONS_LOGGER_ASYNC_MUTEX
24#include <shared_mutex>
25#define ZCLibLog_MUTEX std::shared_mutex
27#define ZCLibLog_MUTEX std::mutex
48 explicit ThreadPool(
const size_t numThreads = 1) : stop(false) {
49 for (
size_t i = 0; i < numThreads; ++i) {
53 std::function<void()> task;
55 std::unique_lock<std::mutex> lock(mtx);
56 cv.wait(lock, [
this] {
return stop || !tasks.empty(); });
57 if (stop && tasks.empty())
return;
58 task = std::move(tasks.front());
71 std::lock_guard<std::mutex> lock(mtx);
75 for (
auto& t : workers) t.join();
82 void submit(std::function<
void()> task) {
84 std::lock_guard<std::mutex> lock(mtx);
85 tasks.push(std::move(task));
91 std::vector<std::thread> workers;
92 std::queue<std::function<void()>> tasks;
94 std::condition_variable cv;
95 std::atomic<bool> stop;
109 #if ZCLIBLOG_LOGGER_CONFIGURATIONS_DEFAULT_CSNPRINTF
110 = formatters::csnprintf
123 if (!message.empty()) {
124 auto message_p = std::make_shared<std::string>(std::move(message));
125 LoggerAsync_ThreadPool.
submit(
126 [
this, message_p, level] {
127 #if ZCLIBLOG_LOGGER_CONFIGURATIONS_LOGGER_ASYNC_MUTEX
128 std::lock_guard<ZCLibLog_MUTEX> lock(m_mutex);
132 for (
const auto& the_executor_pair : this->
m_executors) {
133 the_executor_pair.second->do_execute(*message_p, level);
基本日志器,无执行
Definition logger_base.hpp:53
BaseLogger(std::string name, const std::initializer_list< executor > &executor_ptrs={}, const LogLevelCfg config={})
构造同步日志器
Definition logger_base.hpp:149
std::vector< executor_pair > m_executors
Definition logger_base.hpp:67
内部使用的线程池
Definition logger_async.hpp:42
~ThreadPool()
析构线程池
Definition logger_async.hpp:69
void submit(std::function< void()> task)
提交任务到线程池
Definition logger_async.hpp:82
ThreadPool(const size_t numThreads=1)
构造线程池
Definition logger_async.hpp:48
#define ZCLIBLOG_LOGGER_CONFIGURATIONS_ASYNC_THREAD_NUM
异步Logger默认线程数量
Definition logger_configurations.h:15
ZCLibLog的命名空间
Definition android_log.hpp:16
LogLevel
一些日志等级
Definition logger_types.hpp:35
异步日志器
Definition logger_async.hpp:113
Tag WARN
WARN级别Tag
Definition logger_async.hpp:151
Tag ALL
ALL级别Tag
Definition logger_async.hpp:143
Tag FATAL
FATAL级别Tag
Definition logger_async.hpp:155
Tag DEBUG
DEBUG级别Tag
Definition logger_async.hpp:147
void execute(std::string &message, const LogLevel level) const
调用执行器处理日志信息和等级
Definition logger_async.hpp:122
Tag INFO
INFO级别Tag
Definition logger_async.hpp:149
Tag TRACE
TRACE级别Tag
Definition logger_async.hpp:145
Tag ERROR
ERROR级别Tag
Definition logger_async.hpp:153