void am_print(const char *_format, ...) { init(); if (AM_UNLIKELY(AM_LOG_LEVEL_PRINT <= logLevel)) { char text[2*1024] = {0}; char format[2*1024] = {0}; va_list vlist; snprintf(format, sizeof(format), "%s", _format); if (format[strlen(format) - 1] == '\n') { //Eat trailing \n, \n will be added automatically! format[strlen(format) - 1] = '\0'; } if (logTarget == AM_LOG_TARGET_SYSLOG) { sprintf(text, "%s", format); } else if (logTarget == AM_LOG_TARGET_FILE) { sprintf(text, "%s", format); } else { sprintf(text, B_WHITE("%s"), format); } va_start(vlist, _format); am_level_logv(NULL, AM_LOG_LEVEL_PRINT, text, vlist); va_end(vlist); } }
void am_stat(const char *pretty_func, const char *_file, int line, const char *_format, ...) { init(); if (AM_UNLIKELY(AM_LOG_LEVEL_STAT <= logLevel)) { char text[2*1024] = {0}; char module[256] = {0}; char func[256] = {0}; char file[256] = {0}; char format[2*1024] = {0}; va_list vlist; function_name(func, sizeof(func), pretty_func); class_name(module, sizeof(module), pretty_func); file_name(file, sizeof(file), _file); snprintf(format, sizeof(format), "%s", _format); if (format[strlen(format) - 1] == '\n') { //Eat trailing \n, \n will be added automatically! format[strlen(format) - 1] = '\0'; } if (logTarget == AM_LOG_TARGET_SYSLOG) { sprintf(text, "[%6s][%s:%d: %s]: %s", "STAT", file, line, func, format); } else if (logTarget == AM_LOG_TARGET_FILE) { sprintf(text, "[%20s][%6s][%s:%d: %s]: %s", module, "STAT", file, line, func, format); } else { sprintf(text, "["B_GREEN("%20s")"]["B_CYAN("%6s")"]"\ CYAN("[%s:%d: %s]: ")B_WHITE("%s"), module, "STAT", file, line, func, format); } va_start(vlist, _format); am_level_logv(module, AM_LOG_LEVEL_STAT, text, vlist); va_end(vlist); } }
/* *time: level: process[pid]: [tid] tag: message * [verbose ] */ static int _log_print(int lvl, const char *tag, const char *file, int line, const char *func, const char *msg) { int ret = 0, i = 0; struct iovec vec[LOG_IOVEC_MAX]; char s_time[LOG_TIME_SIZE]; char s_lvl[LOG_LEVEL_SIZE]; char s_tag[LOG_TAG_SIZE]; char s_pname[LOG_PNAME_SIZE]; char s_pid[LOG_PNAME_SIZE]; char s_tid[LOG_PNAME_SIZE]; char s_file[LOG_TEXT_SIZE]; char s_msg[LOG_BUF_SIZE]; pthread_mutex_lock(&_log_mutex); log_get_time(s_time, sizeof(s_time), 0); if (_log_fp == stderr || _log_fd == STDERR_FILENO) { switch(lvl) { case LOG_EMERG: case LOG_ALERT: case LOG_CRIT: case LOG_ERR: snprintf(s_lvl, sizeof(s_lvl), B_RED("[%7s]"), _log_level_str[lvl]); snprintf(s_msg, sizeof(s_msg), RED("%s"), msg); break; case LOG_WARNING: snprintf(s_lvl, sizeof(s_lvl), B_YELLOW("[%7s]"), _log_level_str[lvl]); snprintf(s_msg, sizeof(s_msg), YELLOW("%s"), msg); break; case LOG_INFO: snprintf(s_lvl, sizeof(s_lvl), B_GREEN("[%7s]"), _log_level_str[lvl]); snprintf(s_msg, sizeof(s_msg), GREEN("%s"), msg); break; case LOG_DEBUG: snprintf(s_lvl, sizeof(s_lvl), B_WHITE("[%7s]"), _log_level_str[lvl]); snprintf(s_msg, sizeof(s_msg), WHITE("%s"), msg); break; default: snprintf(s_lvl, sizeof(s_lvl), "[%7s]", _log_level_str[lvl]); snprintf(s_msg, sizeof(s_msg), "%s", msg); break; } } else { snprintf(s_lvl, sizeof(s_lvl), "[%7s]", _log_level_str[lvl]); snprintf(s_msg, sizeof(s_msg), "%s", msg); } if (CHECK_LOG_PREFIX(_log_prefix, LOG_PIDTID_BIT)) { snprintf(s_pname, sizeof(s_pname), "[%s ", _proc_name); snprintf(s_pid, sizeof(s_pid), "pid:%d ", getpid()); snprintf(s_tid, sizeof(s_tid), "tid:%d]", _gettid()); snprintf(s_tag, sizeof(s_tag), "[%s]", tag); snprintf(s_file, sizeof(s_file), "[%s:%d: %s] ", file, line, func); } if (CHECK_LOG_PREFIX(_log_prefix, LOG_FUNCLINE_BIT)) { snprintf(s_file, sizeof(s_file), "[%s:%d: %s] ", file, line, func); } i = -1; if (CHECK_LOG_PREFIX(_log_prefix, LOG_TIMESTAMP_BIT)) { vec[++i].iov_base = (void *)s_time; vec[i].iov_len = strlen(s_time); } if (CHECK_LOG_PREFIX(_log_prefix, LOG_PIDTID_BIT)) { vec[++i].iov_base = (void *)s_pname; vec[i].iov_len = strlen(s_pname); vec[++i].iov_base = (void *)s_pid; vec[i].iov_len = strlen(s_pid); vec[++i].iov_base = (void *)s_tid; vec[i].iov_len = strlen(s_tid); } vec[++i].iov_base = (void *)s_lvl; vec[i].iov_len = strlen(s_lvl); if (CHECK_LOG_PREFIX(_log_prefix, LOG_TAG_BIT)) { vec[++i].iov_base = (void *)s_tag; vec[i].iov_len = strlen(s_tag); } if (CHECK_LOG_PREFIX(_log_prefix, LOG_FUNCLINE_BIT)) { vec[++i].iov_base = (void *)s_file; vec[i].iov_len = strlen(s_file); } vec[++i].iov_base = (void *)s_msg; vec[i].iov_len = strlen(s_msg); if (UNLIKELY(!_log_syslog)) { ret = _log_handle->write(vec, i+1); } pthread_mutex_unlock(&_log_mutex); return ret; }