24 #include <logging/multi.h> 25 #include <logging/logger.h> 27 #include <core/utils/lock_list.h> 28 #include <core/threading/thread.h> 50 LockList<Logger *> loggers;
51 LockList<Logger *>::iterator logit;
81 data =
new MultiLoggerData();
91 data =
new MultiLoggerData();
92 data->loggers.push_back_locked(logger);
101 data->loggers.lock();
102 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
103 delete (*data->logit);
105 data->loggers.clear();
106 data->loggers.unlock();
119 data->loggers.lock();
120 data->loggers.push_back(logger);
122 data->loggers.sort();
123 data->loggers.unique();
124 data->loggers.unlock();
126 data->mutex->unlock();
139 data->loggers.remove_locked(logger);
141 data->mutex->unlock();
152 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
153 (*data->logit)->set_loglevel(level);
156 data->mutex->unlock();
164 gettimeofday(&now, NULL);
169 va_start(va, format);
170 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
173 (*data->logit)->vtlog(level, &now, component, format, vac);
178 data->mutex->unlock();
186 gettimeofday(&now, NULL);
191 va_start(va, format);
192 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
195 (*data->logit)->vlog_debug(component, format, vac);
200 data->mutex->unlock();
208 gettimeofday(&now, NULL);
213 va_start(va, format);
214 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
217 (*data->logit)->vlog_info(component, format, vac);
222 data->mutex->unlock();
230 gettimeofday(&now, NULL);
235 va_start(va, format);
236 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
239 (*data->logit)->vlog_warn(component, format, vac);
244 data->mutex->unlock();
252 gettimeofday(&now, NULL);
257 va_start(va, format);
258 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
261 (*data->logit)->vlog_error(component, format, vac);
266 data->mutex->unlock();
274 gettimeofday(&now, NULL);
278 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
279 (*data->logit)->log(level, component, e);
282 data->mutex->unlock();
290 gettimeofday(&now, NULL);
294 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
295 (*data->logit)->tlog_debug(&now, component, e);
299 data->mutex->unlock();
306 gettimeofday(&now, NULL);
310 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
311 (*data->logit)->tlog_info(&now, component, e);
314 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_warn(&now, component, e);
330 data->mutex->unlock();
338 gettimeofday(&now, NULL);
342 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
343 (*data->logit)->tlog_error(&now, component, e);
346 data->mutex->unlock();
352 const char *component,
const char *format, va_list va)
355 gettimeofday(&now, NULL);
359 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
362 (*data->logit)->vlog(level, component, format, vac);
366 data->mutex->unlock();
374 gettimeofday(&now, NULL);
378 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
381 (*data->logit)->vtlog_debug(&now, component, format, vac);
385 data->mutex->unlock();
393 gettimeofday(&now, NULL);
397 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
400 (*data->logit)->vtlog_info(&now, component, format, vac);
404 data->mutex->unlock();
412 gettimeofday(&now, NULL);
416 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
419 (*data->logit)->vtlog_warn(&now, component, format, vac);
423 data->mutex->unlock();
431 gettimeofday(&now, NULL);
435 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
438 (*data->logit)->vtlog_error(&now, component, format, vac);
442 data->mutex->unlock();
447 const char *component,
const char *format, ...)
452 va_start(va, format);
453 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
456 (*data->logit)->vtlog(level, t, component, format, vac);
461 data->mutex->unlock();
471 va_start(va, format);
472 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
475 (*data->logit)->vlog_debug(component, format, vac);
480 data->mutex->unlock();
491 va_start(va, format);
492 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
495 (*data->logit)->vtlog_info(t, component, format, vac);
500 data->mutex->unlock();
511 va_start(va, format);
512 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
515 (*data->logit)->vtlog_warn(t, component, format, vac);
520 data->mutex->unlock();
531 va_start(va, format);
532 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
535 (*data->logit)->vtlog_error(t, component, format, vac);
540 data->mutex->unlock();
550 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
551 (*data->logit)->tlog(level, t, component, e);
554 data->mutex->unlock();
561 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
562 (*data->logit)->tlog_error(t, component, e);
572 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
573 (*data->logit)->tlog_error(t, component, e);
576 data->mutex->unlock();
586 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
587 (*data->logit)->tlog_error(t, component, e);
590 data->mutex->unlock();
600 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
601 (*data->logit)->tlog_error(t, component, e);
604 data->mutex->unlock();
612 const char *component,
const char *format, va_list va)
617 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
620 (*data->logit)->vtlog(level, t, component, format, vac);
624 data->mutex->unlock();
634 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
637 (*data->logit)->vtlog_debug(t, component, format, vac);
641 data->mutex->unlock();
651 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
654 (*data->logit)->vtlog_info(t, component, format, vac);
658 data->mutex->unlock();
668 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
671 (*data->logit)->vtlog_warn(t, component, format, vac);
675 data->mutex->unlock();
685 for (data->logit = data->loggers.begin(); data->logit != data->loggers.end(); ++data->logit) {
688 (*data->logit)->vtlog_error(t, component, format, vac);
692 data->mutex->unlock();
virtual void vtlog_debug(struct timeval *t, const char *component, const char *format, va_list va)
Log debug message for specific time.
virtual void log_error(const char *component, const char *format,...)
Log error message.
Fawkes library namespace.
virtual void tlog_error(struct timeval *t, const char *component, const char *format,...)
Log error message for specific time.
virtual void tlog_warn(struct timeval *t, const char *component, const char *format,...)
Log warning 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.
thread cannot be cancelled
virtual void vtlog_error(struct timeval *t, const char *component, const char *format, va_list va)
Log error message for specific time.
static void set_cancel_state(CancelState new_state, CancelState *old_state=0)
Set the cancel state of the current thread.
virtual void tlog_info(struct timeval *t, const char *component, const char *format,...)
Log informational message for specific time.
virtual void vtlog_info(struct timeval *t, const char *component, const char *format, va_list va)
Log informational message for specific time.
virtual ~MultiLogger()
Destructor.
virtual void tlog_debug(struct timeval *t, const char *component, const char *format,...)
Log debug message for specific time.
virtual void set_loglevel(LogLevel level)
Sets the log level.
Base class for exceptions in Fawkes.
virtual void vlog_error(const char *component, const char *format, va_list va)
Log error 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 vlog_debug(const char *component, const char *format, va_list va)
Log debug message.
MultiLogger()
Constructor.
virtual void log(LogLevel level, const char *component, const char *format,...)
Log message of given log level.
virtual void log_warn(const char *component, const char *format,...)
Log warning message.
virtual void vlog_info(const char *component, const char *format, va_list va)
Log informational message.
void add_logger(Logger *logger)
Add a logger.
virtual void vtlog_warn(struct timeval *t, const char *component, const char *format, va_list va)
Log warning message for specific time.
virtual void vlog_warn(const char *component, const char *format, va_list va)
Log warning message.
virtual void log_info(const char *component, const char *format,...)
Log informational message.
virtual void vlog(LogLevel level, const char *component, const char *format, va_list va)
Log message for given log level.
virtual void log_debug(const char *component, const char *format,...)
Log debug message.
void remove_logger(Logger *logger)
Remove logger.
virtual void set_loglevel(LogLevel level)
Sets the log level.