75 explicit AsyncLogger(google::base::Logger* wrapped);
104 void Write(
bool force_flush, time_t timestamp,
const char* message,
105 int message_len)
override;
110 void Flush()
override;
139 Msg() : ts(0), message(), level(google::INFO) {}
140 Msg(time_t ts, std::string&& message, int32_t level)
141 : ts(ts), message(
std::move(message)), level(level) {}
142 Msg(
const Msg& rsh) {
144 message = rsh.message;
149 message = rsh.message;
152 Msg& operator=(Msg&& rsh) {
154 message = std::move(rsh.message);
158 Msg& operator=(
const Msg& rsh) {
160 message = rsh.message;
167 void FlushBuffer(
const std::unique_ptr<std::deque<Msg>>& msg);
169 google::base::Logger*
const wrapped_;
170 std::thread log_thread_;
174 std::atomic<uint64_t> flush_count_ = {0};
178 uint64_t drop_count_ = 0;
181 std::unique_ptr<std::deque<Msg>> active_buf_;
185 std::unique_ptr<std::deque<Msg>> flushing_buf_;
188 enum State { INITTED, RUNNING, STOPPED };
189 std::atomic<State> state_ = {INITTED};
190 std::atomic_flag flag_ = ATOMIC_FLAG_INIT;
191 std::unordered_map<std::string, std::unique_ptr<LogFileObject>>