23 #include "mongodb_log_logger_thread.h" 25 #include <core/threading/mutex.h> 26 #include <core/threading/mutex_locker.h> 29 #include <mongo/client/dbclient.h> 31 using namespace mongo;
43 :
Thread(
"MongoLogLoggerThread",
Thread::OPMODE_WAITFORWAKEUP),
46 __mutex =
new Mutex();
60 __collection =
"fawkes.msglog";
80 MongoLogLoggerThread::insert_message(
LogLevel ll,
const char *component,
81 const char *format, va_list va)
86 gettimeofday(&now, NULL);
87 Date_t nowd = now.tv_sec * 1000 + now.tv_usec / 1000;
90 if (vasprintf(&msg, format, va) == -1) {
97 case LL_DEBUG: b.append(
"level",
"DEBUG");
break;
98 case LL_INFO: b.append(
"level",
"INFO");
break;
99 case LL_WARN: b.append(
"level",
"WARN");
break;
100 case LL_ERROR: b.append(
"level",
"ERROR");
break;
101 default: b.append(
"level",
"UNKN");
break;
103 b.append(
"component", component);
104 b.appendDate(
"time", nowd);
105 b.append(
"message", msg);
111 }
catch (mongo::DBException &e) {}
116 MongoLogLoggerThread::insert_message(
LogLevel ll,
const char *component,
122 gettimeofday(&now, NULL);
123 Date_t nowd = now.tv_sec * 1000 + now.tv_usec / 1000;
128 case LL_DEBUG: b.append(
"level",
"DEBUG");
break;
129 case LL_INFO: b.append(
"level",
"INFO");
break;
130 case LL_WARN: b.append(
"level",
"WARN");
break;
131 case LL_ERROR: b.append(
"level",
"ERROR");
break;
132 default: b.append(
"level",
"UNKN");
break;
134 b.append(
"component", component);
135 b.appendDate(
"time", nowd);
136 b.append(
"message", std::string(
"[EXCEPTION] ") + *i);
139 }
catch (mongo::DBException &e) {}
146 const char *format, va_list va)
148 insert_message(
LL_DEBUG, component, format, va);
153 const char *format, va_list va)
155 insert_message(
LL_INFO, component, format, va);
160 const char *format, va_list va)
162 insert_message(
LL_WARN, component, format, va);
167 const char *format, va_list va)
169 insert_message(
LL_ERROR, component, format, va);
176 va_start(arg, format);
177 insert_message(
LL_DEBUG, component, format, arg);
185 va_start(arg, format);
186 insert_message(
LL_INFO, component, format, arg);
194 va_start(arg, format);
195 insert_message(
LL_WARN, component, format, arg);
203 va_start(arg, format);
204 insert_message(
LL_ERROR, component, format, arg);
211 insert_message(
LL_DEBUG, component, e);
217 insert_message(
LL_INFO, component, e);
223 insert_message(
LL_WARN, component, e);
229 insert_message(
LL_ERROR, component, e);
233 MongoLogLoggerThread::tlog_insert_message(
LogLevel ll,
struct timeval *t,
234 const char *component,
235 const char *format, va_list va)
240 if (vasprintf(&msg, format, va) == -1) {
244 Date_t nowd = t->tv_sec * 1000 + t->tv_usec / 1000;
248 case LL_DEBUG: b.append(
"level",
"DEBUG");
break;
249 case LL_INFO: b.append(
"level",
"INFO");
break;
250 case LL_WARN: b.append(
"level",
"WARN");
break;
251 case LL_ERROR: b.append(
"level",
"ERROR");
break;
252 default: b.append(
"level",
"UNKN");
break;
254 b.append(
"component", component);
255 b.appendDate(
"time", nowd);
256 b.append(
"message", msg);
259 }
catch (mongo::DBException &e) {}
268 MongoLogLoggerThread::tlog_insert_message(
LogLevel ll,
struct timeval *t,
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) {}
295 const char *format, ...)
298 va_start(arg, format);
299 tlog_insert_message(
LL_DEBUG, t, component, format, arg);
305 const char *format, ...)
308 va_start(arg, format);
309 tlog_insert_message(
LL_INFO, t, component, format, arg);
315 const char *format, ...)
318 va_start(arg, format);
319 tlog_insert_message(
LL_WARN, t, component, format, arg);
325 const char *format, ...)
328 va_start(arg, format);
329 tlog_insert_message(
LL_ERROR, t, component, format, arg);
337 tlog_insert_message(
LL_DEBUG, t, component, e);
344 tlog_insert_message(
LL_INFO, t, component, e);
351 tlog_insert_message(
LL_WARN, t, component, e);
358 tlog_insert_message(
LL_ERROR, t, component, e);
363 const char *format, va_list va)
365 tlog_insert_message(
LL_DEBUG, t, component, format, va);
370 const char *format, va_list va)
372 tlog_insert_message(
LL_INFO, t, component, format, va);
377 const char *format, va_list va)
379 tlog_insert_message(
LL_WARN, t, component, format, va);
384 const char *format, va_list va)
386 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.
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.