24 #include <core/threading/mutex.h> 25 #include <core/threading/mutex_locker.h> 26 #include <logging/cache.h> 50 max_num_entries_ = num_entries;
53 now_s = (struct ::tm *)malloc(
sizeof(struct ::tm));
64 std::list<CacheLogger::CacheEntry> &
85 return max_num_entries_;
95 if (new_size < num_entries_) {
96 num_entries_ = new_size;
97 messages_.resize(num_entries_);
99 max_num_entries_ = new_size;
119 CacheLogger::push_message(LogLevel ll,
const char *component,
const char *format, va_list va)
124 gettimeofday(&now, NULL);
125 localtime_r(&now.tv_sec, now_s);
127 if (asprintf(×tr,
128 "%02d:%02d:%02d.%06ld",
138 if (vasprintf(&msg, format, va) == -1) {
146 e.component = component;
150 messages_.push_front(e);
155 if (num_entries_ == max_num_entries_) {
156 messages_.pop_back();
164 CacheLogger::push_message(LogLevel ll,
const char *component, Exception &e)
167 MutexLocker
lock(mutex);
169 gettimeofday(&now, NULL);
170 localtime_r(&now.tv_sec, now_s);
172 if (asprintf(×tr,
173 "%02d:%02d:%02d.%06ld",
182 for (Exception::iterator i = e.begin(); i != e.end(); ++i) {
185 ce.component = component;
187 ce.timestr = timestr;
188 ce.message = std::string(
"[EXCEPTION] ") + *i;
189 messages_.push_front(ce);
195 if (num_entries_ > max_num_entries_) {
196 num_entries_ = max_num_entries_;
197 messages_.resize(max_num_entries_);
205 push_message(
LL_DEBUG, component, format, va);
211 push_message(
LL_INFO, component, format, va);
217 push_message(
LL_WARN, component, format, va);
223 push_message(
LL_ERROR, component, format, va);
230 va_start(arg, format);
231 push_message(
LL_DEBUG, component, format, arg);
239 va_start(arg, format);
240 push_message(
LL_INFO, component, format, arg);
248 va_start(arg, format);
249 push_message(
LL_WARN, component, format, arg);
257 va_start(arg, format);
258 push_message(
LL_ERROR, component, format, arg);
265 push_message(
LL_DEBUG, component, e);
271 push_message(
LL_INFO, component, e);
277 push_message(
LL_WARN, component, e);
283 push_message(
LL_ERROR, component, e);
287 CacheLogger::tlog_push_message(LogLevel ll,
289 const char * component,
295 localtime_r(&t->tv_sec, now_s);
297 if (asprintf(×tr,
298 "%02d:%02d:%02d.%06ld",
307 if (vasprintf(&msg, format, va) == -1) {
314 e.component = component;
318 messages_.push_front(e);
323 if (num_entries_ == max_num_entries_) {
324 messages_.pop_back();
333 CacheLogger::tlog_push_message(LogLevel ll,
struct timeval *t,
const char *component, Exception &e)
336 MutexLocker
lock(mutex);
337 localtime_r(&t->tv_sec, now_s);
339 if (asprintf(×tr,
340 "%02d:%02d:%02d.%06ld",
348 for (Exception::iterator i = e.begin(); i != e.end(); ++i) {
351 ce.component = component;
353 ce.timestr = timestr;
354 ce.message = std::string(
"[EXCEPTION] ") + *i;
355 messages_.push_front(ce);
361 if (num_entries_ > max_num_entries_) {
362 num_entries_ = max_num_entries_;
363 messages_.resize(max_num_entries_);
372 va_start(arg, format);
373 tlog_push_message(
LL_DEBUG, t, component, format, arg);
381 va_start(arg, format);
382 tlog_push_message(
LL_INFO, t, component, format, arg);
390 va_start(arg, format);
391 tlog_push_message(
LL_WARN, t, component, format, arg);
399 va_start(arg, format);
400 tlog_push_message(
LL_ERROR, t, component, format, arg);
407 tlog_push_message(
LL_DEBUG, t, component, e);
413 tlog_push_message(
LL_INFO, t, component, e);
419 tlog_push_message(
LL_WARN, t, component, e);
425 tlog_push_message(
LL_ERROR, t, component, e);
431 tlog_push_message(
LL_DEBUG, t, component, format, va);
437 tlog_push_message(
LL_INFO, t, component, format, va);
443 tlog_push_message(
LL_WARN, t, component, format, va);
449 tlog_push_message(
LL_ERROR, t, component, format, va);
void lock()
Lock cache logger, no new messages can be added.
LogLevel log_level
Minimum log level.
virtual void vlog_info(const char *component, const char *format, va_list va)
Log informational message.
virtual void vtlog_debug(struct timeval *t, const char *component, const char *format, va_list va)
Log debug message for specific time.
informational output about normal procedures
virtual void tlog_warn(struct timeval *t, const char *component, const char *format,...)
Log warning message for specific time.
void clear()
Clear messages.
virtual void vtlog_info(struct timeval *t, const char *component, const char *format, va_list va)
Log informational message for specific time.
CacheLogger(unsigned int num_entries=20, LogLevel log_level=LL_DEBUG)
Constructor.
Fawkes library namespace.
void unlock()
Unlock the mutex.
virtual void vtlog_error(struct timeval *t, const char *component, const char *format, va_list va)
Log error message for specific time.
warning, should be investigated but software still functions, an example is that something was reques...
virtual ~CacheLogger()
Destructor.
virtual void log_debug(const char *component, const char *format,...)
Log debug message.
virtual void tlog_info(struct timeval *t, const char *component, const char *format,...)
Log informational message for specific time.
virtual void tlog_debug(struct timeval *t, const char *component, const char *format,...)
Log debug message for specific time.
virtual void vlog_error(const char *component, const char *format, va_list va)
Log error message.
void unlock()
Unlock cache logger.
error, may be recoverable (software still running) or not (software has to terminate).
Base class for exceptions in Fawkes.
void set_size(unsigned int new_size)
Set maximum number of log entries in cache.
virtual void log_info(const char *component, const char *format,...)
Log informational message.
debug output, relevant only when tracking down problems
virtual void tlog_error(struct timeval *t, const char *component, const char *format,...)
Log error message for specific time.
unsigned int size() const
Get maximum number of log entries in cache.
virtual void log_error(const char *component, const char *format,...)
Log error message.
virtual void vlog_debug(const char *component, const char *format, va_list va)
Log debug message.
virtual void log_warn(const char *component, const char *format,...)
Log warning message.
void lock()
Lock this mutex.
virtual void vlog_warn(const char *component, const char *format, va_list va)
Log warning message.
Mutex mutual exclusion lock.
std::list< CacheEntry > & get_messages()
Get messages.
virtual void vtlog_warn(struct timeval *t, const char *component, const char *format, va_list va)
Log warning message for specific time.