void lagopus_log_emit(lagopus_log_level_t lv, uint64_t debug_level, const char *file, int line, const char *func, const char *fmt, ...) { if ((lv != LAGOPUS_LOG_LEVEL_DEBUG && lv != LAGOPUS_LOG_LEVEL_TRACE) || (lv == LAGOPUS_LOG_LEVEL_DEBUG && ((uint16_t)((debug_level & 0xffff)) <= (s_dbg_level))) || (lv == LAGOPUS_LOG_LEVEL_TRACE && lagopus_log_check_trace_flags(debug_level) == true)) { va_list args; char date_buf[32]; char msg[4096]; size_t hdr_len; size_t left_len; char thd_info_buf[1024]; pthread_t tid; char thd_name[32]; int st = 0; int s_errno = errno; char trace_info_buf[1024]; size_t trace_info_len = 0; #ifdef DO_TRACE_DETAIL bool do_trace_detail = false; if (lv == LAGOPUS_LOG_LEVEL_TRACE) { do_trace_detail = ((debug_level & 0xffffffff00000000LL) == 0x0000000100000000LL) ? true : false; } #endif /* DO_TRACE_DETAIL */ if (lv == LAGOPUS_LOG_LEVEL_TRACE) { uint32_t f = (uint32_t)debug_level & 0xffffffff; trace_info_len = s_get_trace_str(f, trace_info_buf, sizeof(trace_info_buf)); } if (s_do_date == true) { s_get_date_str(date_buf, sizeof(date_buf)); } else { date_buf[0] = '\0'; } tid = pthread_self(); #ifdef HAVE_PTHREAD_SETNAME_NP st = pthread_getname_np(tid, thd_name, sizeof(thd_name)); #else thd_name[0] = '\0'; st = -1; #endif /* HAVE_PTHREAD_SETNAME_NP */ #if SIZEOF_PTHREAD_T == SIZEOF_INT64_T #define TIDFMT "0x" PFTIDS(016, x) #elif SIZEOF_PTHREAD_T == SIZEOF_INT #define TIDFMT "0x" PFTIDS(08, x) #endif /* SIZEOF_PTHREAD_T == SIZEOF_INT64_T ... */ if (st == 0 && IS_VALID_STRING(thd_name) == true) { snprintf(thd_info_buf, sizeof(thd_info_buf), "[%u:" TIDFMT ":%s]", (unsigned int)getpid(), tid, thd_name); } else { snprintf(thd_info_buf, sizeof(thd_info_buf), "[%u:" TIDFMT "]", (unsigned int)getpid(), tid); } va_start(args, fmt); va_end(args); if (trace_info_len == 0) { hdr_len = (size_t)snprintf(msg, sizeof(msg), "%s%s%s:%s:%d:%s: ", date_buf, s_get_level_str(lv), thd_info_buf, file, line, func); } else { hdr_len = (size_t)snprintf(msg, sizeof(msg), "%s[%s%s]%s:%s:%d:%s: ", date_buf, s_get_level_str(lv), trace_info_buf, thd_info_buf, file, line, func); } /* * hdr_len indicates the buffer length WITHOUT '\0'. */ left_len = sizeof(msg) - hdr_len; if (left_len > 1) { (void)vsnprintf(msg + hdr_len, left_len -1, fmt, args); } s_do_log(lv, msg); errno = s_errno; } }
void mccp_log_emit(mccp_log_level_t lv, uint64_t flags, const char *file, int line, const char *func, const char *fmt, ...) { if ((lv != MCCP_LOG_LEVEL_DEBUG && lv != MCCP_LOG_LEVEL_TRACE) || (lv == MCCP_LOG_LEVEL_DEBUG && flags <= s_dbg_level) || (lv == MCCP_LOG_LEVEL_TRACE && (s_trace_flags & flags) != 0LL)) { va_list args; char date_buf[32]; char msg[4096]; size_t hdr_len; size_t left_len; char thd_info_buf[1024]; pthread_t tid; char thd_name[32]; int st = 0; int s_errno = errno; if (s_do_date == true) { s_get_date_str(date_buf, sizeof(date_buf)); } else { date_buf[0] = '\0'; } tid = pthread_self(); #ifdef HAVE_PTHREAD_SETNAME_NP st = pthread_getname_np(tid, thd_name, sizeof(thd_name)); #else thd_name[0] = '\0'; st = -1; #endif /* HAVE_PTHREAD_SETNAME_NP */ #if SIZEOF_PTHREAD_T == SIZEOF_INT64_T #define TIDFMT "0x" PFTIDS(016, x) #if SIZEOF_INT64_T == SIZEOF_LONG_INT #define TIDTYPE long int #else #define TIDTYPE int64_t #endif /* SIZEOF_INT64_T == SIZEOF_LONG_INT */ #elif SIZEOF_PTHREAD_T == SIZEOF_INT #define TIDFMT "0x" PFTIDS(08, x) #define TIDTYPE int32_t #endif /* SIZEOF_PTHREAD_T == SIZEOF_INT64_T ... */ if (st == 0 && IS_VALID_STRING(thd_name) == true) { snprintf(thd_info_buf, sizeof(thd_info_buf), "[%u:" TIDFMT ":%s]", (unsigned int)getpid(), (TIDTYPE)tid, thd_name); } else { snprintf(thd_info_buf, sizeof(thd_info_buf), "[%u:" TIDFMT "]", (unsigned int)getpid(), (TIDTYPE)tid); } #undef TIDFMT #undef TIDTYPE va_start(args, fmt); va_end(args); hdr_len = (size_t)snprintf(msg, sizeof(msg), "%s%s%s:%s:%d:%s: ", date_buf, s_get_level_str(lv), thd_info_buf, file, line, func); /* * hdr_len indicates the buffer length WITHOUT '\0'. */ left_len = sizeof(msg) - hdr_len; if (left_len > 1) { (void)vsnprintf(msg + hdr_len, left_len -1, fmt, args); } s_do_log(lv, msg); errno = s_errno; } }