#include <cerrno>
#include <cstring>
+const int BUFFER_LENGTH = 256;
+
class StringBuffer : public std::streambuf {
public:
- StringBuffer() {}
+ StringBuffer() {
+ buffer_index = 0;
+ }
int overflow(int c);
virtual void flush(const std::string &buf) = 0;
void push_back(char c);
private:
- std::string buffer;
+ char buffer[BUFFER_LENGTH];
+ int buffer_index;
};
void Logger::registerThread(const std::string &name)
{
- threadid_t id = thr_get_current_thread_id();
+ std::thread::id id = std::this_thread::get_id();
MutexAutoLock lock(m_mutex);
m_thread_names[id] = name;
}
void Logger::deregisterThread()
{
- threadid_t id = thr_get_current_thread_id();
+ std::thread::id id = std::this_thread::get_id();
MutexAutoLock lock(m_mutex);
m_thread_names.erase(id);
}
return names[lev];
}
+LogColor Logger::color_mode = LOG_COLOR_AUTO;
+
const std::string Logger::getThreadName()
{
- std::map<threadid_t, std::string>::const_iterator it;
+ std::map<std::thread::id, std::string>::const_iterator it;
- threadid_t id = thr_get_current_thread_id();
+ std::thread::id id = std::this_thread::get_id();
it = m_thread_names.find(id);
if (it != m_thread_names.end())
return it->second;
void StringBuffer::push_back(char c)
{
if (c == '\n' || c == '\r') {
- if (!buffer.empty())
- flush(buffer);
- buffer.clear();
+ if (buffer_index)
+ flush(std::string(buffer, buffer_index));
+ buffer_index = 0;
} else {
- buffer.push_back(c);
+ buffer[buffer_index++] = c;
+ if (buffer_index >= BUFFER_LENGTH) {
+ flush(std::string(buffer, buffer_index));
+ buffer_index = 0;
+ }
}
}