22 #include "mongodb_log_logger_thread.h" 24 #include <core/threading/mutex.h> 25 #include <core/threading/mutex_locker.h> 28 #include <mongo/client/dbclient.h> 30 using namespace mongo;
42 :
Thread(
"MongoLogLoggerThread",
Thread::OPMODE_WAITFORWAKEUP),
58 collection_ =
"fawkes.msglog";
76 MongoLogLoggerThread::insert_message(LogLevel ll,
77 const char *component,
84 gettimeofday(&now, NULL);
85 Date_t nowd = now.tv_sec * 1000 + now.tv_usec / 1000;
88 if (vasprintf(&msg, format, va) == -1) {
95 case LL_DEBUG: b.append(
"level",
"DEBUG");
break;
96 case LL_INFO: b.append(
"level",
"INFO");
break;
97 case LL_WARN: b.append(
"level",
"WARN");
break;
98 case LL_ERROR: b.append(
"level",
"ERROR");
break;
99 default: b.append(
"level",
"UNKN");
break;
101 b.append(
"component", component);
102 b.appendDate(
"time", nowd);
103 b.append(
"message", msg);
109 }
catch (mongo::DBException &e) {
115 MongoLogLoggerThread::insert_message(LogLevel ll,
const char *component,
Exception &e)
120 gettimeofday(&now, NULL);
121 Date_t nowd = now.tv_sec * 1000 + now.tv_usec / 1000;
126 case LL_DEBUG: b.append(
"level",
"DEBUG");
break;
127 case LL_INFO: b.append(
"level",
"INFO");
break;
128 case LL_WARN: b.append(
"level",
"WARN");
break;
129 case LL_ERROR: b.append(
"level",
"ERROR");
break;
130 default: b.append(
"level",
"UNKN");
break;
132 b.append(
"component", component);
133 b.appendDate(
"time", nowd);
134 b.append(
"message", std::string(
"[EXCEPTION] ") + *i);
137 }
catch (mongo::DBException &e) {
146 insert_message(
LL_DEBUG, component, format, va);
152 insert_message(
LL_INFO, component, format, va);
158 insert_message(
LL_WARN, component, format, va);
164 insert_message(
LL_ERROR, component, format, va);
171 va_start(arg, format);
172 insert_message(
LL_DEBUG, component, format, arg);
180 va_start(arg, format);
181 insert_message(
LL_INFO, component, format, arg);
189 va_start(arg, format);
190 insert_message(
LL_WARN, component, format, arg);
198 va_start(arg, format);
199 insert_message(
LL_ERROR, component, format, arg);
206 insert_message(
LL_DEBUG, component, e);
212 insert_message(
LL_INFO, component, e);
218 insert_message(
LL_WARN, component, e);
224 insert_message(
LL_ERROR, component, e);
228 MongoLogLoggerThread::tlog_insert_message(LogLevel ll,
230 const char * component,
237 if (vasprintf(&msg, format, va) == -1) {
241 Date_t nowd = t->tv_sec * 1000 + t->tv_usec / 1000;
245 case LL_DEBUG: b.append(
"level",
"DEBUG");
break;
246 case LL_INFO: b.append(
"level",
"INFO");
break;
247 case LL_WARN: b.append(
"level",
"WARN");
break;
248 case LL_ERROR: b.append(
"level",
"ERROR");
break;
249 default: b.append(
"level",
"UNKN");
break;
251 b.append(
"component", component);
252 b.appendDate(
"time", nowd);
253 b.append(
"message", msg);
256 }
catch (mongo::DBException &e) {
266 MongoLogLoggerThread::tlog_insert_message(LogLevel ll,
268 const char * component,
273 Date_t nowd = t->tv_sec * 1000 + t->tv_usec / 1000;
277 case LL_DEBUG: b.append(
"level",
"DEBUG");
break;
278 case LL_INFO: b.append(
"level",
"INFO");
break;
279 case LL_WARN: b.append(
"level",
"WARN");
break;
280 case LL_ERROR: b.append(
"level",
"ERROR");
break;
281 default: b.append(
"level",
"UNKN");
break;
283 b.append(
"component", component);
284 b.appendDate(
"time", nowd);
285 b.append(
"message", std::string(
"[EXCEPTION] ") + *i);
288 }
catch (mongo::DBException &e) {
298 va_start(arg, format);
299 tlog_insert_message(
LL_DEBUG, t, component, format, arg);
307 va_start(arg, format);
308 tlog_insert_message(
LL_INFO, t, component, format, arg);
316 va_start(arg, format);
317 tlog_insert_message(
LL_WARN, t, component, format, arg);
325 va_start(arg, format);
326 tlog_insert_message(
LL_ERROR, t, component, format, arg);
333 tlog_insert_message(
LL_DEBUG, t, component, e);
339 tlog_insert_message(
LL_INFO, t, component, e);
345 tlog_insert_message(
LL_WARN, t, component, e);
351 tlog_insert_message(
LL_ERROR, t, component, e);
356 const char * component,
360 tlog_insert_message(
LL_DEBUG, t, component, format, va);
365 const char * component,
369 tlog_insert_message(
LL_INFO, t, component, format, va);
374 const char * component,
378 tlog_insert_message(
LL_WARN, t, component, format, va);
383 const char * component,
387 tlog_insert_message(
LL_ERROR, t, component, format, va);
virtual void vtlog_error(struct timeval *t, const char *component, const char *format, va_list va)
Log error message for specific time.
Thread aspect that allows to provide a logger to Fawkes.
LogLevel log_level
Minimum log level.
virtual void tlog_warn(struct timeval *t, const char *component, const char *format,...)
Log warning message for specific time.
informational output about normal procedures
virtual void finalize()
Finalize the thread.
virtual void vlog_info(const char *component, const char *format, va_list va)
Log informational message.
MongoLogLoggerThread()
Constructor.
Fawkes library namespace.
void unlock()
Unlock the mutex.
mongo::DBClientBase * mongodb_client
MongoDB client to use to interact with the database.
warning, should be investigated but software still functions, an example is that something was reques...
Thread class encapsulation of pthreads.
Message iterator for exceptions.
virtual void log_debug(const char *component, const char *format,...)
Log debug message.
virtual void log_error(const char *component, const char *format,...)
Log error message.
error, may be recoverable (software still running) or not (software has to terminate).
virtual void tlog_error(struct timeval *t, const char *component, const char *format,...)
Log error message for specific time.
iterator end()
Get end iterator for messages.
virtual void vtlog_info(struct timeval *t, const char *component, const char *format, va_list va)
Log informational message for specific time.
Base class for exceptions in Fawkes.
virtual ~MongoLogLoggerThread()
Destructor.
Thread aspect to access MongoDB.
virtual void log_warn(const char *component, const char *format,...)
Log warning message.
virtual void log_info(const char *component, const char *format,...)
Log informational message.
virtual void loop()
Code to execute in the thread.
iterator begin()
Get iterator for messages.
debug output, relevant only when tracking down problems
virtual void vtlog_debug(struct timeval *t, const char *component, const char *format, va_list va)
Log debug message for specific time.
virtual void vlog_error(const char *component, const char *format, va_list va)
Log error message.
virtual void vtlog_warn(struct timeval *t, const char *component, const char *format, va_list va)
Log warning message for specific time.
virtual void init()
Initialize the thread.
virtual void vlog_warn(const char *component, const char *format, va_list va)
Log warning message.
Mutex mutual exclusion lock.
virtual void tlog_info(struct timeval *t, const char *component, const char *format,...)
Log informational message for specific time.
Configuration * config
This is the Configuration member used to access the configuration.
virtual void vlog_debug(const char *component, const char *format, va_list va)
Log debug message.
virtual void tlog_debug(struct timeval *t, const char *component, const char *format,...)
Log debug message for specific time.
virtual std::string get_string(const char *path)=0
Get value from configuration which is of type string.