24 #include <core/threading/thread.h>
25 #include <core/utils/lock_list.h>
26 #include <logging/logger.h>
27 #include <logging/multi.h>
49 LockList<Logger *> loggers;
50 LockList<Logger *>::iterator logit;
79 data =
new MultiLoggerData();
88 data =
new MultiLoggerData();
89 data->loggers.push_back_locked(logger);
98 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
99 delete (*data->logit);
101 data->loggers.clear();
102 data->loggers.unlock();
114 data->loggers.lock();
115 data->loggers.push_back(logger);
117 data->loggers.sort();
118 data->loggers.unique();
119 data->loggers.unlock();
121 data->mutex->unlock();
133 data->loggers.remove_locked(logger);
135 data->mutex->unlock();
145 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
149 data->mutex->unlock();
156 gettimeofday(&now, NULL);
161 va_start(va, format);
162 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
165 (*data->logit)->
vtlog(level, &now, component, format, vac);
170 data->mutex->unlock();
177 gettimeofday(&now, NULL);
182 va_start(va, format);
183 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
186 (*data->logit)->
vlog_debug(component, format, vac);
191 data->mutex->unlock();
198 gettimeofday(&now, NULL);
203 va_start(va, format);
204 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
207 (*data->logit)->
vlog_info(component, format, vac);
212 data->mutex->unlock();
219 gettimeofday(&now, NULL);
224 va_start(va, format);
225 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
228 (*data->logit)->
vlog_warn(component, format, vac);
233 data->mutex->unlock();
240 gettimeofday(&now, NULL);
245 va_start(va, format);
246 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
249 (*data->logit)->
vlog_error(component, format, vac);
254 data->mutex->unlock();
261 gettimeofday(&now, NULL);
265 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
266 (*data->logit)->
log(level, component, e);
269 data->mutex->unlock();
276 gettimeofday(&now, NULL);
280 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
281 (*data->logit)->
tlog_debug(&now, component, e);
285 data->mutex->unlock();
292 gettimeofday(&now, NULL);
296 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
297 (*data->logit)->
tlog_info(&now, component, e);
300 data->mutex->unlock();
307 gettimeofday(&now, NULL);
311 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
312 (*data->logit)->
tlog_warn(&now, component, e);
315 data->mutex->unlock();
322 gettimeofday(&now, NULL);
326 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
327 (*data->logit)->
tlog_error(&now, component, e);
330 data->mutex->unlock();
337 gettimeofday(&now, NULL);
341 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
344 (*data->logit)->
vlog(level, component, format, vac);
348 data->mutex->unlock();
355 gettimeofday(&now, NULL);
359 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
362 (*data->logit)->
vtlog_debug(&now, component, format, vac);
366 data->mutex->unlock();
373 gettimeofday(&now, NULL);
377 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
380 (*data->logit)->
vtlog_info(&now, component, format, vac);
384 data->mutex->unlock();
391 gettimeofday(&now, NULL);
395 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
398 (*data->logit)->
vtlog_warn(&now, component, format, vac);
402 data->mutex->unlock();
409 gettimeofday(&now, NULL);
413 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
416 (*data->logit)->
vtlog_error(&now, component, format, vac);
420 data->mutex->unlock();
429 va_start(va, format);
430 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
433 (*data->logit)->
vtlog(level, t, component, format, vac);
438 data->mutex->unlock();
447 va_start(va, format);
448 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
451 (*data->logit)->
vlog_debug(component, format, vac);
456 data->mutex->unlock();
466 va_start(va, format);
467 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
470 (*data->logit)->
vtlog_info(t, component, format, vac);
475 data->mutex->unlock();
485 va_start(va, format);
486 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
489 (*data->logit)->
vtlog_warn(t, component, format, vac);
494 data->mutex->unlock();
504 va_start(va, format);
505 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
508 (*data->logit)->
vtlog_error(t, component, format, vac);
513 data->mutex->unlock();
522 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
523 (*data->logit)->
tlog(level, t, component, e);
526 data->mutex->unlock();
532 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
543 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
547 data->mutex->unlock();
556 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
560 data->mutex->unlock();
569 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
573 data->mutex->unlock();
579 const char * component,
586 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
589 (*data->logit)->
vtlog(level, t, component, format, vac);
593 data->mutex->unlock();
602 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
605 (*data->logit)->
vtlog_debug(t, component, format, vac);
609 data->mutex->unlock();
618 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
621 (*data->logit)->
vtlog_info(t, component, format, vac);
625 data->mutex->unlock();
634 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
637 (*data->logit)->
vtlog_warn(t, component, format, vac);
641 data->mutex->unlock();
650 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
653 (*data->logit)->
vtlog_error(t, component, format, vac);
657 data->mutex->unlock();
Base class for exceptions in Fawkes.
LogLevel log_level
Minimum log level.
virtual void vlog(LogLevel level, const char *component, const char *format, va_list va)
Log message for given log level.
virtual void log(LogLevel level, const char *component, const char *format,...)
Log message of given log level.
virtual ~MultiLogger()
Destructor.
virtual void tlog_warn(struct timeval *t, const char *component, const char *format,...)
Log warning message for specific time.
virtual void log_info(const char *component, const char *format,...)
Log informational message.
virtual void tlog_debug(struct timeval *t, const char *component, const char *format,...)
Log debug message for specific time.
virtual void vtlog_error(struct timeval *t, const char *component, const char *format, va_list va)
Log error message for specific time.
virtual void vlog_error(const char *component, const char *format, va_list va)
Log error message.
virtual void vlog_debug(const char *component, const char *format, va_list va)
Log debug message.
virtual void vtlog(LogLevel level, struct timeval *t, const char *component, const char *format, va_list va)
Log message for given log level and time.
virtual void set_loglevel(LogLevel level)
Sets the log level.
virtual void tlog_info(struct timeval *t, const char *component, const char *format,...)
Log informational message for specific time.
virtual void vtlog_debug(struct timeval *t, const char *component, const char *format, va_list va)
Log debug message for specific time.
void add_logger(Logger *logger)
Add a logger.
virtual void log_warn(const char *component, const char *format,...)
Log warning 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 log_debug(const char *component, const char *format,...)
Log debug message.
virtual void vtlog_info(struct timeval *t, const char *component, const char *format, va_list va)
Log informational message for specific time.
virtual void tlog_error(struct timeval *t, const char *component, const char *format,...)
Log error message for specific time.
virtual void tlog(LogLevel level, struct timeval *t, const char *component, const char *format,...)
Log message of given log level and time.
MultiLogger()
Constructor.
virtual void vlog_info(const char *component, const char *format, va_list va)
Log informational message.
virtual void log_error(const char *component, const char *format,...)
Log error message.
void remove_logger(Logger *logger)
Remove logger.
virtual void vlog_warn(const char *component, const char *format, va_list va)
Log warning message.
@ CANCEL_DISABLED
thread cannot be cancelled
static void set_cancel_state(CancelState new_state, CancelState *old_state=0)
Set the cancel state of the current thread.
Fawkes library namespace.