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);