static void vlog_msg(struct Logger *logger, int priority, const char *format, va_list args) { char buffer[1024]; if (logger == NULL) { init_default_logger(); vlog_msg(default_logger, priority, format, args); return; } if (priority > logger->priority) return; if (logger->fd) { /* file logger */ time_t t = time(NULL); struct tm *tmp = localtime(&t); size_t len = strftime(buffer, sizeof(buffer), "%F %T ", tmp); vsnprintf(buffer + len, sizeof(buffer) - len, format, args); fprintf(logger->fd, "%s\n", buffer); } else { openlog(logger->ident, LOG_PID, logger->facility); vsyslog(priority, format, args); closelog(); } }
int log_error(const char *function, const char *file, const int line, const char *format,...) { char nformat[1024]; va_list args; sprintf(nformat,"Error occurred in %s(), at %s:%d\n",function,file,line); strmcat(nformat,format,1023-(strlen(nformat)+strlen(format))); va_start(args,format); return vlog_msg(LogError,nformat,args); }
void debug(const char *format, ...) { va_list args; va_start(args, format); vlog_msg(default_logger, LOG_DEBUG, format, args); va_end(args); }
void notice(const char *format, ...) { va_list args; va_start(args, format); vlog_msg(default_logger, LOG_NOTICE, format, args); va_end(args); }
void info(const char *format, ...) { va_list args; va_start(args, format); vlog_msg(default_logger, LOG_INFO, format, args); va_end(args); }
void warn(const char *format, ...) { va_list args; va_start(args, format); vlog_msg(default_logger, LOG_WARNING, format, args); va_end(args); }
void err(const char *format, ...) { va_list args; va_start(args, format); vlog_msg(default_logger, LOG_ERR, format, args); va_end(args); }
void log_msg(struct Logger *logger, int priority, const char *format, ...) { va_list args; va_start(args, format); vlog_msg(logger, priority, format, args); va_end(args); }
void log_dbg(const char *format, ...) { va_list args; va_start(args, format); vlog_msg(format, args); va_end(args); }
void fatal(const char *format, ...) { va_list args; va_start(args, format); vlog_msg(default_logger, LOG_CRIT, format, args); va_end(args); exit(EXIT_FAILURE); }
int info(char *format,...) { va_list args; va_start(args,format); return vlog_msg(LogInfo,format,args); }
int warn(char *format,...) { va_list args; va_start(args,format); return vlog_msg(LogWarning,format,args); }
int log_msg(LogLevel l,char *format,...) { va_list args; va_start(args,format); return vlog_msg(l,format,args); }