@@ -59,28 +59,30 @@ class Logger::Impl
59
59
60
60
static void enableEchoMode (bool enable);
61
61
62
- static void enableDateTime (bool enable);
63
-
64
62
static void setLevelSymbol (Logger::Level level, std::string symbol);
65
63
66
64
static void setLoggingLevel (Logger::Level level);
67
65
66
+ static void setTimestampMode (Logger::TimestampMode timestampMode, std::string separator);
67
+
68
68
static void init (std::string filename, bool append);
69
69
70
70
void flush ();
71
71
72
72
std::ostringstream & getStream (Logger::Level level);
73
73
74
- void prefixDateTime ();
74
+ void prefixTimestamp ();
75
75
76
76
private:
77
77
78
78
static bool m_echoMode;
79
79
80
- static bool m_dateTime;
81
-
82
80
static Logger::Level m_level;
83
81
82
+ static Logger::TimestampMode m_timestampMode;
83
+
84
+ static std::string m_timestampSeparator;
85
+
84
86
static std::ofstream m_fout;
85
87
86
88
using SymbolMap = std::map<Logger::Level, std::string>;
@@ -98,10 +100,12 @@ class Logger::Impl
98
100
99
101
bool Logger::Impl::m_echoMode = true ;
100
102
101
- bool Logger::Impl::m_dateTime = true ;
102
-
103
103
Logger::Level Logger::Impl::m_level = Logger::Level::Info;
104
104
105
+ Logger::TimestampMode Logger::Impl::m_timestampMode = Logger::TimestampMode::DateTime;
106
+
107
+ std::string Logger::Impl::m_timestampSeparator = " : " ;
108
+
105
109
std::ofstream Logger::Impl::m_fout;
106
110
107
111
// Default level symbols
@@ -143,15 +147,10 @@ void Logger::Impl::enableEchoMode(bool enable)
143
147
Impl::m_echoMode = enable;
144
148
}
145
149
146
- void Logger::Impl::enableDateTime (bool enable)
147
- {
148
- Impl::m_dateTime = enable;
149
- }
150
-
151
150
std::ostringstream & Logger::Impl::getStream (Logger::Level level)
152
151
{
153
152
m_activeLevel = level;
154
- Impl::prefixDateTime ();
153
+ Impl::prefixTimestamp ();
155
154
m_oss << Impl::m_symbols[level] << " " ;
156
155
return m_oss;
157
156
}
@@ -166,15 +165,45 @@ void Logger::Impl::setLoggingLevel(Logger::Level level)
166
165
Impl::m_level = level;
167
166
}
168
167
169
- void Logger::Impl::prefixDateTime ()
168
+ void Logger::Impl::setTimestampMode (TimestampMode timestampMode, std::string separator)
169
+ {
170
+ Impl::m_timestampMode = timestampMode;
171
+ Impl::m_timestampSeparator = separator;
172
+ }
173
+
174
+ void Logger::Impl::prefixTimestamp ()
170
175
{
171
- if (Impl::m_dateTime)
176
+ std::string timeStr;
177
+
178
+ using std::chrono::duration_cast;
179
+ using std::chrono::system_clock;
180
+
181
+ switch (Impl::m_timestampMode)
182
+ {
183
+ case Logger::TimestampMode::None:
184
+ break ;
185
+ case Logger::TimestampMode::DateTime:
172
186
{
173
187
time_t rawTime;
174
188
time (&rawTime);
175
- std::string timeStr ( ctime (&rawTime) );
189
+ timeStr = ctime (&rawTime);
176
190
timeStr.erase (timeStr.length () - 1 );
177
- m_oss << " [" << timeStr << " ] " ;
191
+ }
192
+ break ;
193
+ case Logger::TimestampMode::EpochSeconds:
194
+ timeStr = std::to_string (duration_cast<std::chrono::seconds>(system_clock::now ().time_since_epoch ()).count ());
195
+ break ;
196
+ case Logger::TimestampMode::EpochMilliseconds:
197
+ timeStr = std::to_string (duration_cast<std::chrono::milliseconds>(system_clock::now ().time_since_epoch ()).count ());
198
+ break ;
199
+ case Logger::TimestampMode::EpochMicroseconds:
200
+ timeStr = std::to_string (duration_cast<std::chrono::microseconds>(system_clock::now ().time_since_epoch ()).count ());
201
+ break ;
202
+ }
203
+
204
+ if (!timeStr.empty ())
205
+ {
206
+ m_oss << timeStr << m_timestampSeparator;
178
207
}
179
208
}
180
209
@@ -267,11 +296,6 @@ void Logger::enableEchoMode(bool enable)
267
296
Impl::enableEchoMode (enable);
268
297
}
269
298
270
- void Logger::enableDateTime (bool enable)
271
- {
272
- Impl::enableDateTime (enable);
273
- }
274
-
275
299
void Logger::setLoggingLevel (Level level)
276
300
{
277
301
Impl::setLoggingLevel (level);
@@ -282,6 +306,11 @@ void Logger::setLevelSymbol(Level level, std::string symbol)
282
306
Impl::setLevelSymbol (level, symbol);
283
307
}
284
308
309
+ void Logger::setTimestampMode (TimestampMode timestampMode, std::string separator)
310
+ {
311
+ Impl::setTimestampMode (timestampMode, separator);
312
+ }
313
+
285
314
std::ostringstream & Logger::trace ()
286
315
{
287
316
return m_impl->trace ();
0 commit comments