File: log.c

package info (click to toggle)
rtpengine 12.5.1.35-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 12,628 kB
  • sloc: ansic: 80,617; perl: 43,314; python: 3,041; sh: 1,092; makefile: 630; asm: 211
file content (56 lines) | stat: -rw-r--r-- 1,037 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "log.h"
#include <syslog.h>
#include <stdarg.h>
#include <stdio.h>
#include "loglib.h"


static const uint max_log_lines = 10000;

mutex_t log_lock = MUTEX_STATIC_INIT;
static GQueue log_buffer = G_QUEUE_INIT;


void __ilog(int prio, const char *fmt, ...) {
        va_list ap;

	GSList *to_free = NULL;

        va_start(ap, fmt);
	char *line = g_strdup_vprintf(fmt, ap);
	{
		LOCK(&log_lock);
		g_queue_push_tail(&log_buffer, line);
		while (log_buffer.length > max_log_lines)
			to_free = g_slist_prepend(to_free, g_queue_pop_head(&log_buffer));
	}
        va_end(ap);

	g_slist_free_full(to_free, g_free);
}


GQueue *get_log_lines(uint num, uint end) {
	GQueue *ret = g_queue_new();

	LOCK(&log_lock);

	GList *l = log_buffer.tail;
	while (l && end--)
		l = l->prev;
	for (; l && num; num--, l = l->prev)
		g_queue_push_head(ret, g_strdup(l->data));

	return ret;
}


void log_clear(void) {
	LOCK(&log_lock);
	g_queue_clear_full(&log_buffer, g_free);
}


int get_local_log_level(unsigned int subsystem_idx) {
	return -1;
}