24 #include <core/threading/mutex.h> 25 #include <core/threading/mutex_locker.h> 26 #include <logging/cache.h> 54 __max_num_entries = num_entries;
57 now_s = (struct ::tm *)malloc(
sizeof(struct ::tm));
68 std::list<CacheLogger::CacheEntry> &
90 return __max_num_entries;
101 if (new_size < __num_entries) {
102 __num_entries = new_size;
103 __messages.resize(__num_entries);
105 __max_num_entries = new_size;
126 CacheLogger::push_message(
LogLevel ll,
const char *component,
const char *format, va_list va)
131 gettimeofday(&now, NULL);
132 localtime_r(&now.tv_sec, now_s);
134 if (asprintf(×tr,
"%02d:%02d:%02d.%06ld", now_s->tm_hour,
135 now_s->tm_min, now_s->tm_sec, now.tv_usec) == -1) {
140 if (vasprintf(&msg, format, va) == -1) {
152 __messages.push_front(e);
157 if (__num_entries == __max_num_entries) {
158 __messages.pop_back();
171 gettimeofday(&now, NULL);
172 localtime_r(&now.tv_sec, now_s);
174 if (asprintf(×tr,
"%02d:%02d:%02d.%06ld", now_s->tm_hour,
175 now_s->tm_min, now_s->tm_sec, now.tv_usec) == -1) {
185 e.
message = std::string(
"[EXCEPTION] ") + *i;
186 __messages.push_front(e);
192 if (__num_entries > __max_num_entries) {
193 __num_entries = __max_num_entries;
194 __messages.resize(__max_num_entries);
202 push_message(
LL_DEBUG, component, format, va);
208 push_message(
LL_INFO, component, format, va);
214 push_message(
LL_WARN, component, format, va);
220 push_message(
LL_ERROR, component, format, va);
227 va_start(arg, format);
228 push_message(
LL_DEBUG, component, format, arg);
236 va_start(arg, format);
237 push_message(
LL_INFO, component, format, arg);
245 va_start(arg, format);
246 push_message(
LL_WARN, component, format, arg);
254 va_start(arg, format);
255 push_message(
LL_ERROR, component, format, arg);
262 push_message(
LL_DEBUG, component, e);
268 push_message(
LL_INFO, component, e);
274 push_message(
LL_WARN, component, e);
280 push_message(
LL_ERROR, component, e);
284 CacheLogger::tlog_push_message(
LogLevel ll,
struct timeval *t,
const char *component,
285 const char *format, va_list va)
289 localtime_r(&t->tv_sec, now_s);
291 if (asprintf(×tr,
"%02d:%02d:%02d.%06ld", now_s->tm_hour,
292 now_s->tm_min, now_s->tm_sec, t->tv_usec) == -1) {
296 if (vasprintf(&msg, format, va) == -1) {
307 __messages.push_front(e);
312 if (__num_entries == __max_num_entries) {
313 __messages.pop_back();
322 CacheLogger::tlog_push_message(
LogLevel ll,
struct timeval *t,
const char *component,
Exception &e)
326 localtime_r(&t->tv_sec, now_s);
328 if (asprintf(×tr,
"%02d:%02d:%02d.%06ld", now_s->tm_hour,
329 now_s->tm_min, now_s->tm_sec, t->tv_usec) == -1) {
338 e.
message = std::string(
"[EXCEPTION] ") + *i;
339 __messages.push_front(e);
345 if (__num_entries > __max_num_entries) {
346 __num_entries = __max_num_entries;
347 __messages.resize(__max_num_entries);
356 va_start(arg, format);
357 tlog_push_message(
LL_DEBUG, t, component, format, arg);
365 va_start(arg, format);
366 tlog_push_message(
LL_INFO, t, component, format, arg);
374 va_start(arg, format);
375 tlog_push_message(
LL_WARN, t, component, format, arg);
383 va_start(arg, format);
384 tlog_push_message(
LL_ERROR, t, component, format, arg);
391 tlog_push_message(
LL_DEBUG, t, component, e);
397 tlog_push_message(
LL_INFO, t, component, e);
403 tlog_push_message(
LL_WARN, t, component, e);
409 tlog_push_message(
LL_ERROR, t, component, e);
415 tlog_push_message(
LL_DEBUG, t, component, format, va);
421 tlog_push_message(
LL_INFO, t, component, format, va);
427 tlog_push_message(
LL_WARN, t, component, format, va);
433 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.
std::string timestr
Time encoded as string.
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.
LogLevel log_level
log level
virtual void log_debug(const char *component, const char *format,...)
Log debug message.
Message iterator for exceptions.
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).
iterator end()
Get end iterator for messages.
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.
iterator begin()
Get iterator for messages.
debug output, relevant only when tracking down problems
std::string message
Message.
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.
struct timeval time
raw time
std::string component
component
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.