mirror of
https://github.com/owntone/owntone-server.git
synced 2025-03-03 07:10:08 -05:00
[logger] Support logging with logfmt format
This commit is contained in:
parent
07afe390f7
commit
aab6f6c718
@ -49,6 +49,7 @@ static cfg_opt_t sec_general[] =
|
||||
CFG_STR("db_backup_path", NULL, CFGF_NONE),
|
||||
CFG_STR("logfile", STATEDIR "/log/" PACKAGE ".log", CFGF_NONE),
|
||||
CFG_INT_CB("loglevel", E_LOG, CFGF_NONE, &cb_loglevel),
|
||||
CFG_STR("logformat", "default", CFGF_NONE),
|
||||
CFG_STR("admin_password", NULL, CFGF_NONE),
|
||||
CFG_INT("websocket_port", 3688, CFGF_NONE),
|
||||
CFG_STR("websocket_interface", NULL, CFGF_NONE),
|
||||
|
46
src/logger.c
46
src/logger.c
@ -60,7 +60,13 @@ static char *logfilename;
|
||||
static FILE *logfile;
|
||||
static char *labels[] = { "config", "daap", "db", "httpd", "http", "main", "mdns", "misc", "rsp", "scan", "xcode", "event", "remote", "dacp", "ffmpeg", "artwork", "player", "raop", "laudio", "dmap", "dbperf", "spotify", "scrobble", "cache", "mpd", "stream", "cast", "fifo", "lib", "web", "airplay", "rcp" };
|
||||
static char *severities[] = { "FATAL", "LOG", "WARN", "INFO", "DEBUG", "SPAM" };
|
||||
static char *format_labels[] = { "default", "logfmt" };
|
||||
|
||||
enum format {
|
||||
L_FMT_DEFAULT = 0,
|
||||
L_FMT_LOGFMT = 1,
|
||||
};
|
||||
static enum format format = L_FMT_DEFAULT;
|
||||
|
||||
static int
|
||||
set_logdomains(char *domains)
|
||||
@ -94,6 +100,23 @@ set_logdomains(char *domains)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
format_code_get(const char *label)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!label)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(format_labels); i++)
|
||||
{
|
||||
if (strcmp(label, format_labels[i]) == 0)
|
||||
return i;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
repeat_count(const char *fmt)
|
||||
{
|
||||
@ -139,16 +162,34 @@ logger_write_with_label(int severity, int domain, const char *content)
|
||||
char thread_nametid[32];
|
||||
time_t t;
|
||||
struct tm timebuf;
|
||||
char logfmt_msg[1024];
|
||||
int ret;
|
||||
|
||||
thread_getnametid(thread_nametid, sizeof(thread_nametid));
|
||||
|
||||
t = time(NULL);
|
||||
|
||||
if (format == L_FMT_LOGFMT)
|
||||
{
|
||||
ret = strftime(stamp, sizeof(stamp), "%Y-%m-%dT%H:%M:%S%z", localtime_r(&t, &timebuf));
|
||||
if (ret == 0)
|
||||
stamp[0] = '\0';
|
||||
|
||||
strncpy(logfmt_msg, content, sizeof(logfmt_msg));
|
||||
logfmt_msg[sizeof(logfmt_msg) - 1] = '\0';
|
||||
safe_snreplace(logfmt_msg, sizeof(logfmt_msg), "\n", " ");
|
||||
safe_snreplace(logfmt_msg, sizeof(logfmt_msg), "\"", "\\\"");
|
||||
|
||||
logger_write("time=%s level=%s thread=\"%s\" component=%s msg=\"%s\"\n", stamp, severities[severity], thread_nametid,
|
||||
labels[domain], logfmt_msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = strftime(stamp, sizeof(stamp), "%Y-%m-%d %H:%M:%S", localtime_r(&t, &timebuf));
|
||||
if (ret == 0)
|
||||
stamp[0] = '\0';
|
||||
|
||||
logger_write("[%s] [%5s] [%16s] %8s: %s", stamp, severities[severity], thread_nametid, labels[domain], content);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -408,7 +449,7 @@ logger_detach(void)
|
||||
}
|
||||
|
||||
int
|
||||
logger_init(char *file, char *domains, int severity)
|
||||
logger_init(char *file, char *domains, int severity, char *logformat)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@ -421,6 +462,7 @@ logger_init(char *file, char *domains, int severity)
|
||||
|
||||
console = 1;
|
||||
threshold = severity;
|
||||
format = format_code_get(logformat);
|
||||
|
||||
if (domains)
|
||||
{
|
||||
|
@ -84,7 +84,7 @@ void
|
||||
logger_detach(void);
|
||||
|
||||
int
|
||||
logger_init(char *file, char *domains, int severity);
|
||||
logger_init(char *file, char *domains, int severity, char *logformat);
|
||||
|
||||
void
|
||||
logger_deinit(void);
|
||||
|
18
src/main.c
18
src/main.c
@ -495,6 +495,7 @@ main(int argc, char **argv)
|
||||
int loglevel = -1;
|
||||
char *logdomains = NULL;
|
||||
char *logfile = NULL;
|
||||
char *logformat = NULL;
|
||||
char *ffid = NULL;
|
||||
char *pidfile = PIDFILE;
|
||||
char *webroot = WEB_ROOT;
|
||||
@ -510,8 +511,7 @@ main(int argc, char **argv)
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
struct option option_map[] =
|
||||
{
|
||||
struct option option_map[] = {
|
||||
{ "ffid", 1, NULL, 'b' },
|
||||
{ "debug", 1, NULL, 'd' },
|
||||
{ "logdomains", 1, NULL, 'D' },
|
||||
@ -525,8 +525,9 @@ main(int argc, char **argv)
|
||||
|
||||
{ "mdns-no-rsp", 0, NULL, 512 },
|
||||
{ "mdns-no-daap", 0, NULL, 513 },
|
||||
{ "mdns-no-cname",0, NULL, 514 },
|
||||
{ "mdns-no-cname", 0, NULL, 514 },
|
||||
{ "mdns-no-web", 0, NULL, 515 },
|
||||
{ "logformat", 1, NULL, 516 },
|
||||
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
@ -551,6 +552,10 @@ main(int argc, char **argv)
|
||||
mdns_no_web = true;
|
||||
break;
|
||||
|
||||
case 516:
|
||||
logformat = optarg;
|
||||
break;
|
||||
|
||||
case 't':
|
||||
testrun = true;
|
||||
break;
|
||||
@ -603,7 +608,7 @@ main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
ret = logger_init(NULL, NULL, (loglevel < 0) ? E_LOG : loglevel);
|
||||
ret = logger_init(NULL, NULL, (loglevel < 0) ? E_LOG : loglevel, NULL);
|
||||
if (ret != 0)
|
||||
{
|
||||
fprintf(stderr, "Could not initialize log facility\n");
|
||||
@ -625,10 +630,11 @@ main(int argc, char **argv)
|
||||
/* Reinit log facility with configfile values */
|
||||
if (loglevel < 0)
|
||||
loglevel = cfg_getint(cfg_getsec(cfg, "general"), "loglevel");
|
||||
|
||||
if (!logformat)
|
||||
logformat = cfg_getstr(cfg_getsec(cfg, "general"), "logformat");
|
||||
logfile = cfg_getstr(cfg_getsec(cfg, "general"), "logfile");
|
||||
|
||||
ret = logger_init(logfile, logdomains, loglevel);
|
||||
ret = logger_init(logfile, logdomains, loglevel, logformat);
|
||||
if (ret != 0)
|
||||
{
|
||||
fprintf(stderr, "Could not reinitialize log facility with config file settings\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user