Reopen logs on SIGHUP (GitHub issue #10)

master
Nicolas Favre-Felix 11 years ago
parent b56218c84a
commit 9a2be34650

@ -82,6 +82,7 @@ server_new(const char *cfg_file) {
int i;
struct server *s = calloc(1, sizeof(struct server));
s->log.fd = -1;
s->cfg = conf_read(cfg_file);
/* workers */
@ -178,6 +179,9 @@ server_start(struct server *s) {
slog_init(s);
/* install signal handler to reload logs */
signal(SIGHUP, slog_reload);
/* start worker threads */
for(i = 0; i < s->cfg->http_threads; ++i) {
worker_start(s->w[i]);

@ -14,18 +14,30 @@
#include "server.h"
#include "conf.h"
/* global pointer to the server objects, used to reload logs */
static struct server *__server;
/**
* Initialize log writer.
*/
void
slog_init(struct server *s) {
__server = s;
s->log.self = getpid();
if(s->cfg->logfile) {
int old_fd = s->log.fd;
s->log.fd = open(s->cfg->logfile,
O_WRONLY | O_APPEND | O_CREAT, S_IRUSR|S_IWUSR);
/* close old log */
if (old_fd != -1) {
close(old_fd);
}
if (s->log.fd != -1)
return;
@ -35,6 +47,14 @@ slog_init(struct server *s) {
s->log.fd = 2; /* stderr */
}
/**
* Reload log file on SIGHUP
*/
void
slog_reload() {
slog_init(__server);
}
/**
* Write log message to disk, or stderr.
*/

@ -11,6 +11,9 @@ typedef enum {
struct server;
void
slog_reload();
void
slog_init(struct server *s);

Loading…
Cancel
Save