@@ -68,21 +68,6 @@ class RawLogBuffer : public StringBuffer {
68
68
void flush (const std::string &buffer);
69
69
};
70
70
71
-
72
- #ifdef __ANDROID__
73
- static unsigned int level_to_android[] = {
74
- ANDROID_LOG_INFO, // LL_NONE
75
- // ANDROID_LOG_FATAL,
76
- ANDROID_LOG_ERROR, // LL_ERROR
77
- ANDROID_LOG_WARN, // LL_WARNING
78
- ANDROID_LOG_WARN, // LL_ACTION
79
- // ANDROID_LOG_INFO,
80
- ANDROID_LOG_DEBUG, // LL_INFO
81
- ANDROID_LOG_VERBOSE, // LL_VERBOSE
82
-
83
- };
84
- #endif
85
-
86
71
// //
87
72
// // Globals
88
73
// //
@@ -124,6 +109,41 @@ std::ostream actionstream(&action_buf);
124
109
std::ostream infostream (&info_buf);
125
110
std::ostream verbosestream (&verbose_buf);
126
111
112
+ // Android
113
+ #ifdef __ANDROID__
114
+
115
+ static unsigned int g_level_to_android[] = {
116
+ ANDROID_LOG_INFO, // LL_NONE
117
+ // ANDROID_LOG_FATAL,
118
+ ANDROID_LOG_ERROR, // LL_ERROR
119
+ ANDROID_LOG_WARN, // LL_WARNING
120
+ ANDROID_LOG_WARN, // LL_ACTION
121
+ // ANDROID_LOG_INFO,
122
+ ANDROID_LOG_DEBUG, // LL_INFO
123
+ ANDROID_LOG_VERBOSE, // LL_VERBOSE
124
+ };
125
+
126
+ class AndroidSystemLogOutput : public ICombinedLogOutput {
127
+ public:
128
+ AndroidSystemLogOutput ()
129
+ {
130
+ g_logger.addOutput (this );
131
+ }
132
+ ~AndroidSystemLogOutput ()
133
+ {
134
+ g_logger.removeOutput (this );
135
+ }
136
+ void logRaw (LogLevel lev, const std::string &line)
137
+ {
138
+ assert (ARRLEN (g_level_to_android) == LL_MAX);
139
+ __android_log_print (g_level_to_android[lev],
140
+ PROJECT_NAME_C, " %s" , line.c_str ());
141
+ }
142
+ };
143
+
144
+ AndroidSystemLogOutput g_android_log_output;
145
+
146
+ #endif
127
147
128
148
// /////////////////////////////////////////////////////////////////////////////
129
149
@@ -232,36 +252,35 @@ void Logger::log(LogLevel lev, const std::string &text)
232
252
233
253
const std::string thread_name = getThreadName ();
234
254
const std::string label = getLevelLabel (lev);
255
+ const std::string timestamp = getTimestamp ();
235
256
std::ostringstream os (std::ios_base::binary);
236
- os << getTimestamp () << " : " << label << " [" << thread_name << " ]: " << text;
257
+ os << timestamp << " : " << label << " [" << thread_name << " ]: " << text;
237
258
238
- logToSystem (lev, text);
239
- logToOutputs (lev, os.str ());
259
+ logToOutputs (lev, os.str (), timestamp, thread_name, text);
240
260
}
241
261
242
262
void Logger::logRaw (LogLevel lev, const std::string &text)
243
263
{
244
264
if (m_silenced_levels[lev])
245
265
return ;
246
266
247
- logToSystem (lev, text);
248
- logToOutputs (lev, text);
267
+ logToOutputsRaw (lev, text);
249
268
}
250
269
251
- void Logger::logToSystem (LogLevel lev, const std::string &text )
270
+ void Logger::logToOutputsRaw (LogLevel lev, const std::string &line )
252
271
{
253
- #ifdef __ANDROID__
254
- assert (ARRLEN (level_to_android) == LL_MAX);
255
- __android_log_print (level_to_android[lev],
256
- PROJECT_NAME_C, " %s" , text.c_str ());
257
- #endif
272
+ MutexAutoLock lock (m_mutex);
273
+ for (size_t i = 0 ; i != m_outputs[lev].size (); i++)
274
+ m_outputs[lev][i]->logRaw (lev, line);
258
275
}
259
276
260
- void Logger::logToOutputs (LogLevel lev, const std::string &text)
277
+ void Logger::logToOutputs (LogLevel lev, const std::string &combined,
278
+ const std::string &time, const std::string &thread_name,
279
+ const std::string &payload_text)
261
280
{
262
281
MutexAutoLock lock (m_mutex);
263
282
for (size_t i = 0 ; i != m_outputs[lev].size (); i++)
264
- m_outputs[lev][i]->log (text );
283
+ m_outputs[lev][i]->log (lev, combined, time , thread_name, payload_text );
265
284
}
266
285
267
286
@@ -271,11 +290,11 @@ void Logger::logToOutputs(LogLevel lev, const std::string &text)
271
290
272
291
void FileLogOutput::open (const std::string &filename)
273
292
{
274
- stream .open (filename.c_str (), std::ios::app | std::ios::ate);
275
- if (!stream .good ())
293
+ m_stream .open (filename.c_str (), std::ios::app | std::ios::ate);
294
+ if (!m_stream .good ())
276
295
throw FileNotGoodException (" Failed to open log file " +
277
296
filename + " : " + strerror (errno));
278
- stream << " \n\n "
297
+ m_stream << " \n\n "
279
298
" -------------" << std::endl
280
299
<< " Separator" << std::endl
281
300
<< " -------------\n " << std::endl;
@@ -313,8 +332,6 @@ void StringBuffer::push_back(char c)
313
332
}
314
333
315
334
316
-
317
-
318
335
void LogBuffer::flush (const std::string &buffer)
319
336
{
320
337
logger.log (level, buffer);
0 commit comments