Esempio n. 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++;
	}
}
Esempio n. 2
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);
	}
}