-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.cc
87 lines (70 loc) · 1.87 KB
/
logger.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#ifndef LOGGER_H_
# include "logger.h"
#endif
#include <chrono>
#include <ctime>
#include <iostream>
#include <sstream>
#include <iomanip>
namespace stream_internal {
class NullStreambuf : public std::streambuf {
};
class NullOStream : private NullStreambuf, public std::ostream {
public:
NullOStream()
: std::ostream(this) {
}
NullStreambuf* rdbuf() {
return this;
}
};
} // namespace stream_internal
Logger::LoggerStream::LoggerStream(Logger & logger, bool force)
: logger_(logger), force_(force) {
}
Logger::LoggerStream::~LoggerStream() {
if (logger_.enabled()) {
std::cout << std::endl;
}
}
static stream_internal::NullOStream null_stream;
std::ostream & Logger::LoggerStream::operator()() {
if (logger_.enabled()) {
return std::cout;
} else {
return null_stream;
}
}
Logger & Logger::singleton() {
static Logger sobj;
return sobj;
}
void Logger::init(bool enable) {
enabled_ = enable;
}
bool Logger::enabled() {
return enabled_;
}
#ifdef WIN32
# define localtime_r(_Time, _Tm) localtime_s(_Tm, _Time)
#endif
static std::ostream& operator<< (std::ostream& stream, const tm* tm) {
return stream << 1900 + tm->tm_year << '-'
<< std::setfill('0') << std::setw(2) << tm->tm_mon + 1 << '-'
<< std::setfill('0') << std::setw(2) << tm->tm_mday << ' '
<< std::setfill('0') << std::setw(2) << tm->tm_hour << ':'
<< std::setfill('0') << std::setw(2) << tm->tm_min << ':'
<< std::setfill('0') << std::setw(2) << tm->tm_sec;
}
static void get_local_time(tm * t) {
auto now = std::chrono::system_clock::now();
auto in_time_t = std::chrono::system_clock::to_time_t(now);
localtime_r(&in_time_t, t);
}
static tm local_time;
Logger::LoggerStream Logger::operator()(bool force) {
auto s = LoggerStream(*this, force);
get_local_time(&local_time);
s() << "[" << &local_time << "] ";
return s;
}