Commit 950b48de authored by Tsuyoshi Uchida's avatar Tsuyoshi Uchida Committed by Daniel Verkamp
Browse files

log: use facilitynames to set/get log facility (#81)

* log: use facilitynames to set/get log facility

Define our own facilitynames[] instead of defining SYSLOG_NAMES
parent 86e8a920
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ extern unsigned int spdk_g_notice_stderr_flag;
	spdk_errlog(__FILE__, __LINE__, __func__, __VA_ARGS__)

int spdk_set_log_facility(const char *facility);
const char *spdk_get_log_facility(void);
int spdk_set_log_priority(const char *priority);
void spdk_noticelog(const char *file, const int line, const char *func,
		    const char *format, ...) __attribute__((__format__(__printf__, 4, 5)));
+3 −4
Original line number Diff line number Diff line
@@ -123,10 +123,9 @@ spdk_app_config_dump_global_section(FILE *fp)
	if (NULL == fp)
		return;

	/* FIXME - lookup log facility and put it in place of "local7" below */
	fprintf(fp, GLOBAL_CONFIG_TMPL,
		spdk_app_get_core_mask(), spdk_trace_get_tpoint_group_mask(),
		"local7");
		spdk_get_log_facility());
}

int
@@ -176,7 +175,7 @@ spdk_app_get_running_config(char **config_str, char *name)
}

static const char *
spdk_get_log_facility(struct spdk_conf *config)
spdk_app_get_log_facility(struct spdk_conf *config)
{
	struct spdk_conf_section *sp;
	const char *logfacility;
@@ -288,7 +287,7 @@ spdk_app_init(struct spdk_app_opts *opts)

	/* open log files */
	if (opts->log_facility == NULL) {
		opts->log_facility = spdk_get_log_facility(g_spdk_app.config);
		opts->log_facility = spdk_app_get_log_facility(g_spdk_app.config);
		if (opts->log_facility == NULL) {
			fprintf(stderr, "NULL logfacility\n");
			spdk_conf_free(g_spdk_app.config);
+62 −25
Original line number Diff line number Diff line
@@ -45,41 +45,78 @@
static TAILQ_HEAD(, spdk_trace_flag) g_trace_flags = TAILQ_HEAD_INITIALIZER(g_trace_flags);

unsigned int spdk_g_notice_stderr_flag = 1;
unsigned int spdk_g_log_facility = LOG_DAEMON;
int spdk_g_log_facility = LOG_DAEMON;
unsigned int spdk_g_log_priority = LOG_NOTICE;

SPDK_LOG_REGISTER_TRACE_FLAG("debug", SPDK_TRACE_DEBUG)

#define MAX_TMPBUF 1024

struct syslog_code {
	const char *c_name;
	int c_val;
};

static const struct syslog_code facilitynames[] = {
	{ "auth",	LOG_AUTH,	},
	{ "authpriv",	LOG_AUTHPRIV,	},
	{ "cron",	LOG_CRON,	},
	{ "daemon",	LOG_DAEMON,	},
	{ "ftp",	LOG_FTP,	},
	{ "kern",	LOG_KERN,	},
	{ "lpr",	LOG_LPR,	},
	{ "mail",	LOG_MAIL,	},
	{ "news",	LOG_NEWS,	},
	{ "syslog",	LOG_SYSLOG,	},
	{ "user",	LOG_USER,	},
	{ "uucp",	LOG_UUCP,	},
	{ "local0",	LOG_LOCAL0,	},
	{ "local1",	LOG_LOCAL1,	},
	{ "local2",	LOG_LOCAL2,	},
	{ "local3",	LOG_LOCAL3,	},
	{ "local4",	LOG_LOCAL4,	},
	{ "local5",	LOG_LOCAL5,	},
	{ "local6",	LOG_LOCAL6,	},
	{ "local7",	LOG_LOCAL7,	},
#ifdef __FreeBSD__
	{ "console",	LOG_CONSOLE,	},
	{ "ntp",	LOG_NTP,	},
	{ "security",	LOG_SECURITY,	},
#endif
	{ NULL,		-1,		}
};

int
spdk_set_log_facility(const char *facility)
{
	if (strcasecmp(facility, "daemon") == 0) {
		spdk_g_log_facility = LOG_DAEMON;
	} else if (strcasecmp(facility, "auth") == 0) {
		spdk_g_log_facility = LOG_AUTH;
	} else if (strcasecmp(facility, "authpriv") == 0) {
		spdk_g_log_facility = LOG_AUTHPRIV;
	} else if (strcasecmp(facility, "local1") == 0) {
		spdk_g_log_facility = LOG_LOCAL1;
	} else if (strcasecmp(facility, "local2") == 0) {
		spdk_g_log_facility = LOG_LOCAL2;
	} else if (strcasecmp(facility, "local3") == 0) {
		spdk_g_log_facility = LOG_LOCAL3;
	} else if (strcasecmp(facility, "local4") == 0) {
		spdk_g_log_facility = LOG_LOCAL4;
	} else if (strcasecmp(facility, "local5") == 0) {
		spdk_g_log_facility = LOG_LOCAL5;
	} else if (strcasecmp(facility, "local6") == 0) {
		spdk_g_log_facility = LOG_LOCAL6;
	} else if (strcasecmp(facility, "local7") == 0) {
		spdk_g_log_facility = LOG_LOCAL7;
	} else {
	int i;

	for (i = 0; facilitynames[i].c_name != NULL; i++) {
		if (strcasecmp(facilitynames[i].c_name, facility) == 0) {
			spdk_g_log_facility = facilitynames[i].c_val;
			return 0;
		}
	}

	spdk_g_log_facility = LOG_DAEMON;
	return -1;
}
	return 0;

const char *
spdk_get_log_facility(void)
{
	const char *def_name = NULL;
	int i;

	for (i = 0; facilitynames[i].c_name != NULL; i++) {
		if (facilitynames[i].c_val == spdk_g_log_facility) {
			return facilitynames[i].c_name;
		} else if (facilitynames[i].c_val == LOG_DAEMON) {
			def_name = facilitynames[i].c_name;
		}
	}

	return def_name;
}

int
+11 −0
Original line number Diff line number Diff line
@@ -45,11 +45,22 @@ static void
log_test(void)
{
	int rc = 0;
	const char *buf;

	rc = spdk_set_log_facility("test");
	CU_ASSERT(rc == -1);
	CU_ASSERT_EQUAL(spdk_g_log_facility, LOG_DAEMON);
	rc = spdk_set_log_facility("local7");
	CU_ASSERT(rc == 0);
	CU_ASSERT_EQUAL(spdk_g_log_facility, LOG_LOCAL7);

	spdk_g_log_facility = -1;
	buf = spdk_get_log_facility();
	CU_ASSERT_STRING_EQUAL(buf, "daemon");
	spdk_g_log_facility = LOG_LOCAL7;
	buf = spdk_get_log_facility();
	CU_ASSERT_STRING_EQUAL(buf, "local7");

	rc = spdk_set_log_priority("test");
	CU_ASSERT(rc == -1);
	rc = spdk_set_log_priority("debug");