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));
58 CacheLogger::~CacheLogger()
64 std::list<CacheLogger::CacheEntry> &
65 CacheLogger::get_messages()
83 CacheLogger::size()
const
85 return max_num_entries_;
92 CacheLogger::set_size(
unsigned int new_size)
95 if (new_size < num_entries_) {
96 num_entries_ = new_size;
97 messages_.resize(num_entries_);
99 max_num_entries_ = new_size;
113 CacheLogger::unlock()
119 CacheLogger::push_message(
LogLevel ll,
const char *component,
const char *format, va_list va)
121 if (log_level <= ll) {
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) {
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)
166 if (log_level <= ll) {
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_);
203 CacheLogger::vlog_debug(
const char *component,
const char *format, va_list va)
205 push_message(LL_DEBUG, component, format, va);
209 CacheLogger::vlog_info(
const char *component,
const char *format, va_list va)
211 push_message(LL_INFO, component, format, va);
215 CacheLogger::vlog_warn(
const char *component,
const char *format, va_list va)
217 push_message(LL_WARN, component, format, va);
221 CacheLogger::vlog_error(
const char *component,
const char *format, va_list va)
223 push_message(LL_ERROR, component, format, va);
227 CacheLogger::log_debug(
const char *component,
const char *format, ...)
230 va_start(arg, format);
231 push_message(LL_DEBUG, component, format, arg);
236 CacheLogger::log_info(
const char *component,
const char *format, ...)
239 va_start(arg, format);
240 push_message(LL_INFO, component, format, arg);
245 CacheLogger::log_warn(
const char *component,
const char *format, ...)
248 va_start(arg, format);
249 push_message(LL_WARN, component, format, arg);
254 CacheLogger::log_error(
const char *component,
const char *format, ...)
257 va_start(arg, format);
258 push_message(LL_ERROR, component, format, arg);
263 CacheLogger::log_debug(
const char *component,
Exception &e)
265 push_message(LL_DEBUG, component, e);
269 CacheLogger::log_info(
const char *component,
Exception &e)
271 push_message(LL_INFO, component, e);
275 CacheLogger::log_warn(
const char *component,
Exception &e)
277 push_message(LL_WARN, component, e);
281 CacheLogger::log_error(
const char *component,
Exception &e)
283 push_message(LL_ERROR, component, e);
289 const char * component,
293 if (log_level <= ll) {
295 localtime_r(&t->tv_sec, now_s);
297 if (asprintf(×tr,
298 "%02d:%02d:%02d.%06ld",
307 if (vasprintf(&msg, format, va) == -1) {
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)
335 if (log_level <= ll) {
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_);
369 CacheLogger::tlog_debug(
struct timeval *t,
const char *component,
const char *format, ...)
372 va_start(arg, format);
373 tlog_push_message(LL_DEBUG, t, component, format, arg);
378 CacheLogger::tlog_info(
struct timeval *t,
const char *component,
const char *format, ...)
381 va_start(arg, format);
382 tlog_push_message(LL_INFO, t, component, format, arg);
387 CacheLogger::tlog_warn(
struct timeval *t,
const char *component,
const char *format, ...)
390 va_start(arg, format);
391 tlog_push_message(LL_WARN, t, component, format, arg);
396 CacheLogger::tlog_error(
struct timeval *t,
const char *component,
const char *format, ...)
399 va_start(arg, format);
400 tlog_push_message(LL_ERROR, t, component, format, arg);
405 CacheLogger::tlog_debug(
struct timeval *t,
const char *component,
Exception &e)
407 tlog_push_message(LL_DEBUG, t, component, e);
411 CacheLogger::tlog_info(
struct timeval *t,
const char *component,
Exception &e)
413 tlog_push_message(LL_INFO, t, component, e);
417 CacheLogger::tlog_warn(
struct timeval *t,
const char *component,
Exception &e)
419 tlog_push_message(LL_WARN, t, component, e);
423 CacheLogger::tlog_error(
struct timeval *t,
const char *component,
Exception &e)
425 tlog_push_message(LL_ERROR, t, component, e);
429 CacheLogger::vtlog_debug(
struct timeval *t,
const char *component,
const char *format, va_list va)
431 tlog_push_message(LL_DEBUG, t, component, format, va);
435 CacheLogger::vtlog_info(
struct timeval *t,
const char *component,
const char *format, va_list va)
437 tlog_push_message(LL_INFO, t, component, format, va);
441 CacheLogger::vtlog_warn(
struct timeval *t,
const char *component,
const char *format, va_list va)
443 tlog_push_message(LL_WARN, t, component, format, va);
447 CacheLogger::vtlog_error(
struct timeval *t,
const char *component,
const char *format, va_list va)
449 tlog_push_message(LL_ERROR, t, component, format, va);