24 #include <core/threading/mutex.h>
25 #include <core/threading/mutex_locker.h>
26 #include <logging/cache.h>
51 CacheLogger::CacheLogger(
unsigned int num_entries,
LogLevel log_level)
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) {
148 e.component = component;
152 __messages.push_front(e);
157 if (__num_entries == __max_num_entries) {
158 __messages.pop_back();
166 CacheLogger::push_message(LogLevel ll,
const char *component, Exception &e)
169 MutexLocker
lock(mutex);
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) {
179 for (Exception::iterator i = e.begin(); i != e.end(); ++i) {
182 e.component = component;
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) {
303 e.component = component;
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)
325 MutexLocker
lock(mutex);
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) {
332 for (Exception::iterator i = e.begin(); i != e.end(); ++i) {
335 e.component = component;
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);