aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmar Polo <op@omarpolo.com>2021-07-07 09:18:24 +0000
committerOmar Polo <op@omarpolo.com>2021-07-07 09:18:24 +0000
commit8a50fc0330f50c1c0c5fc0b541e0b8a19f900ea5 (patch)
tree5387297c5de6552741788a6f1f1301ba272f1001
parentd336aeafd4b848f3d6f3711e8d233d8b75ce297b (diff)
initialize the logger early
Initialize the logger as soon as possible and log by default to stderr. With this, some (common?) errors are printed early instead of ending up in syslog. # NB: this is in configless mode % ./gmid -p 80 [2021-07-07 11:05:57] bind: Address already in use % ./gmid -p 81 [2021-07-07 11:13:53] bind: Permission denied %
-rw-r--r--gmid.c22
-rw-r--r--log.c6
2 files changed, 13 insertions, 15 deletions
diff --git a/gmid.c b/gmid.c
index 8a2a940..ba1948b 100644
--- a/gmid.c
+++ b/gmid.c
@@ -526,9 +526,6 @@ setup_configless(int argc, char **argv, const char *cgi)
loc = xcalloc(1, sizeof(*loc));
TAILQ_INSERT_HEAD(&host->locations, loc, locations);
- imsg_compose(&logibuf, IMSG_LOG_TYPE, 0, 0, 2, NULL, 0);
- imsg_flush(&logibuf);
-
serve(argc, argv, NULL);
imsg_compose(&logibuf, IMSG_QUIT, 0, 0, -1, NULL, 0);
@@ -542,6 +539,7 @@ main(int argc, char **argv)
int ch, conftest = 0, configless = 0;
int pidfd, old_ipv6, old_port;
+ logger_init();
init_config();
while ((ch = getopt_long(argc, argv, opts, longopts, NULL)) != -1) {
@@ -557,7 +555,8 @@ main(int argc, char **argv)
case 'D':
if (cmdline_symset(optarg) == -1)
- errx(1, "invalid macro: %s", optarg);
+ fatal("could not parse macro definition: %s",
+ optarg);
break;
case 'd':
@@ -623,7 +622,7 @@ main(int argc, char **argv)
}
if (config_path != NULL && (argc > 0 || configless))
- errx(1, "can't specify options in config mode.");
+ fatal("can't specify options in config mode.");
if (conftest) {
parse_conf(config_path);
@@ -632,15 +631,17 @@ main(int argc, char **argv)
}
if (!conf.foreground && !configless) {
+ /* log to syslog */
+ imsg_compose(&logibuf, IMSG_LOG_TYPE, 0, 0, -1, NULL, 0);
+ imsg_flush(&logibuf);
+
if (daemon(1, 1) == -1)
- err(1, "daemon");
+ fatal("daemon: %s", strerror(errno));
}
if (config_path != NULL)
parse_conf(config_path);
- logger_init();
-
sock4 = make_socket(conf.port, AF_INET);
sock6 = -1;
if (conf.ipv6)
@@ -654,11 +655,6 @@ main(int argc, char **argv)
return 0;
}
- if (conf.foreground) {
- imsg_compose(&logibuf, IMSG_LOG_TYPE, 0, 0, 2, NULL, 0);
- imsg_flush(&logibuf);
- }
-
pidfd = write_pidfile(pidfile);
/* Linux seems to call the event handlers even when we're
diff --git a/log.c b/log.c
index 9d0e267..e67ae7c 100644
--- a/log.c
+++ b/log.c
@@ -299,11 +299,11 @@ handle_imsg_log(struct imsgbuf *ibuf, struct imsg *imsg, size_t datalen)
static void
handle_imsg_log_type(struct imsgbuf *ibuf, struct imsg *imsg, size_t datalen)
{
- if (log != NULL) {
+ if (log != NULL && log != stderr) {
fflush(log);
fclose(log);
- log = NULL;
}
+ log = NULL;
if (imsg->fd != -1) {
if ((log = fdopen(imsg->fd, "a")) == NULL) {
@@ -324,6 +324,8 @@ handle_dispatch_imsg(int fd, short ev, void *d)
int
logger_main(int fd, struct imsgbuf *ibuf)
{
+ log = stderr;
+
event_init();
event_set(&imsgev, fd, EV_READ | EV_PERSIST, &handle_dispatch_imsg, ibuf);