예제 #1
0
static void __cs_log_check_duplicates(uint8_t hdr_len, uint8_t hdr_logcount_offset, uint8_t hdr_date_offset, uint8_t hdr_time_offset, uint8_t hdr_info_offset)
{
	bool repeated_line = strcmp(last_log_txt, log_txt + hdr_len) == 0;
	if (last_log_duplicates > 0)
	{
		if (!cs_valid_time(&last_log_ts))  // Must be initialized once
			last_log_ts = log_ts;
		// Report duplicated lines when the new log line is different
		// than the old or 60 seconds have passed.
		int64_t gone = comp_timeb(&log_ts, &last_log_ts);
		if (!repeated_line || gone >= 60*1000)
		{
			uint8_t dupl_hdr_logcount_offset = 0, dupl_hdr_date_offset = 0, dupl_hdr_time_offset = 0, dupl_hdr_info_offset = 0;
			uint8_t dupl_header_len = get_log_header(dupl, sizeof(dupl), &dupl_hdr_logcount_offset, &dupl_hdr_date_offset, &dupl_hdr_time_offset, &dupl_hdr_info_offset);
			snprintf(dupl + dupl_header_len - 1, sizeof(dupl) - dupl_header_len, "        (-) -- Skipped %u duplicated log lines --", last_log_duplicates);
			write_to_log_int(dupl, dupl_header_len, dupl_hdr_logcount_offset, dupl_hdr_date_offset, dupl_hdr_time_offset, dupl_hdr_info_offset);
			last_log_duplicates = 0;
			last_log_ts = log_ts;
		}
	}
	if (!repeated_line)
	{
		memcpy(last_log_txt, log_txt + hdr_len, LOG_BUF_SIZE - hdr_len);
		write_to_log_int(log_txt, hdr_len, hdr_logcount_offset, hdr_date_offset, hdr_time_offset, hdr_info_offset);
	} else {
		last_log_duplicates++;
	}
}
예제 #2
0
void cs_log_int(uint16_t mask, int8_t lock __attribute__((unused)), const uchar *buf, int32_t n, const char *fmt, ...)
{
	va_list params;

	char log_txt[LOG_BUF_SIZE];
	int32_t i, len = 0;
	pthread_mutex_lock(&log_mutex);
	if (((mask & cs_dblevel) || !mask) && (fmt))
	{
		va_start(params, fmt);
		len = get_log_header(1, log_txt);
		vsnprintf(log_txt + len, sizeof(log_txt) - len, fmt, params);
		va_end(params);
		int repeated_line = strcmp(last_log_txt, log_txt + len) == 0;
		if (last_log_duplicates > 0) {
			if (!last_log_ts) // Must be initialized once
				last_log_ts = log_ts;
			// Report duplicated lines when the new log line is different
			// than the old or 60 seconds have passed.
			if (!repeated_line || log_ts - last_log_ts >= 60) {
				char dupl[len + 32];
				len = get_log_header(2, dupl);
				snprintf(dupl + len - 1, len + 32, "--- Skipped %d duplicated log lines ---", last_log_duplicates);
				write_to_log_int(dupl, 0);
				last_log_duplicates = 0;
				last_log_ts = log_ts;
			}
		}
		if (!repeated_line) {
			memcpy(last_log_txt, log_txt + len, LOG_BUF_SIZE);
			write_to_log_int(log_txt, len);
		} else {
			last_log_duplicates++;
		}
	}
	if (buf && ((mask & cs_dblevel) || !mask))
	{
		for (i=0; i<n; i+=16)
		{
			len = get_log_header(0, log_txt);
			cs_hexdump(1, buf+i, (n-i>16) ? 16 : n-i, log_txt + len, sizeof(log_txt) - len);
			write_to_log_int(log_txt, len);
		}
	}
	pthread_mutex_unlock(&log_mutex);
}
예제 #3
0
void cs_log_int(uint16_t mask, int8_t lock __attribute__((unused)), const uchar *buf, int32_t n, const char *fmt, ...)
{
	va_list params;

	char log_txt[LOG_BUF_SIZE];
	int32_t i, len = 0;
	if (((mask & cs_dblevel) || !mask) && (fmt))
	{
		va_start(params, fmt);
		len = get_log_header(1, log_txt);
		vsnprintf(log_txt + len, sizeof(log_txt) - len, fmt, params);
		write_to_log_int(log_txt, len);
		va_end(params);
	}
	if (buf && (mask & cs_dblevel || !mask))
	{
		for (i=0; i<n; i+=16)
		{
			len = get_log_header(0, log_txt);
			cs_hexdump(1, buf+i, (n-i>16) ? 16 : n-i, log_txt + len, sizeof(log_txt) - len);
			write_to_log_int(log_txt, len);
		}
	}
}
예제 #4
0
void cs_log_hex(const char *log_prefix, const uint8_t *buf, int32_t n, const char *fmt, ...)
{
	if(logStarted == 0)
		{ return; }
	
	SAFE_MUTEX_LOCK_NOLOG(&log_mutex);
	__do_log();
	if(buf)
	{
		int32_t i;
		__init_log_prefix("%10s   ");
		for(i = 0; i < n; i += 16)
		{
			cs_hexdump(1, buf + i, (n - i > 16) ? 16 : n - i, log_txt + hdr_len + log_prefix_len, sizeof(log_txt) - (hdr_len + log_prefix_len));
			write_to_log_int(log_txt, hdr_len, hdr_logcount_offset, hdr_date_offset, hdr_time_offset, hdr_info_offset);
		}
	}
	SAFE_MUTEX_UNLOCK_NOLOG(&log_mutex);
}
예제 #5
0
void cs_log_int(uint16_t mask, int8_t lock __attribute__((unused)), const uchar *buf, int32_t n, const char *fmt, ...)
{
	if((mask & cs_dblevel) || !mask)
	{
		va_list params;

		int32_t dupl_header_len, repeated_line, i, len = 0;
		pthread_mutex_lock(&log_mutex);
		if(fmt)
		{
			va_start(params, fmt);
			len = get_log_header(1, log_txt);
			vsnprintf(log_txt + len, sizeof(log_txt) - len, fmt, params);
			va_end(params);
			if(cfg.logduplicatelines)
			{
				memcpy(last_log_txt, log_txt + len, LOG_BUF_SIZE);
				write_to_log_int(log_txt, len);
			}
			else
			{
				repeated_line = strcmp(last_log_txt, log_txt + len) == 0;
				if(last_log_duplicates > 0)
				{
					if(!cs_valid_time(&last_log_ts))  // Must be initialized once
						{ last_log_ts = log_ts; }
					// Report duplicated lines when the new log line is different
					// than the old or 60 seconds have passed.
					int32_t gone = comp_timeb(&log_ts, &last_log_ts);
					if(!repeated_line || gone >= 60*1000)
					{
						dupl_header_len = get_log_header(2, dupl);
						snprintf(dupl + dupl_header_len - 1, sizeof(dupl) - dupl_header_len, "--- Skipped %u duplicated log lines ---", last_log_duplicates);
						write_to_log_int(dupl, 0);
						last_log_duplicates = 0;
						last_log_ts = log_ts;
					}
				}
				if(!repeated_line)
				{
					memcpy(last_log_txt, log_txt + len, LOG_BUF_SIZE);
					write_to_log_int(log_txt, len);
				}
				else
				{
					last_log_duplicates++;
				}
			}
		}
		if(buf)
		{
			for(i = 0; i < n; i += 16)
			{
				len = get_log_header(0, log_txt);
				cs_hexdump(1, buf + i, (n - i > 16) ? 16 : n - i, log_txt + len, sizeof(log_txt) - len);
				write_to_log_int(log_txt, len);
			}
		}
		pthread_mutex_unlock(&log_mutex);
	}
}