File: log.cpp

package info (click to toggle)
entropybroker 2.9-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 1,600 kB
  • sloc: cpp: 14,386; sh: 934; makefile: 188; java: 148; perl: 12
file content (74 lines) | stat: -rw-r--r-- 1,368 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <syslog.h>
#include <string.h>
#include <time.h>

#include "error.h"

bool log_console = true;
char *log_file = NULL;
bool log_syslog = false;
int log_level = 1;

void dolog(int level, const char *format, ...)
{
	if (level <= log_level)
	{
		char buffer[4096];
		va_list ap;
		time_t now = time(NULL);

		char timestr[256] = { 0 };
		ctime_r(&now, timestr); // can't set a limit so hopefully this 256 is enough!
		char *dummy = strchr(timestr, '\n');
		if (dummy) *dummy = 0x00;

		va_start(ap, format);
		vsnprintf(buffer, sizeof buffer, format, ap);
		va_end(ap);

		if (log_console)
			printf("%s]%d| %s\n", timestr, level, buffer);

		if (log_file)
		{
			FILE *fh = fopen(log_file, "a+");
			if (!fh)
			{
				syslog(LOG_CRIT, "error accessing logfile %s: %m", log_file);
				fprintf(stderr, "error accessing logfile %s: %s", log_file, strerror(errno));
				exit(1);
			}

			fprintf(fh, "%s]%d| %s\n", timestr, level, buffer);

			fclose(fh);
		}

		if (log_syslog)
			syslog(level, "%s", buffer);
	}
}

void set_logging_parameters(bool console, char *file, bool sl, int ll)
{
	log_console = console;
	log_file = file;
	log_syslog = sl;
	log_level = ll;

	if (ll < 0)
	{
		ll = 0;

		error_exit("Log level must be >= 0");
	}
}

void set_loglevel(int ll)
{
	log_level = ll;
}