From 8228273473a9feb804e813d3160d4b46c38eb3b1 Mon Sep 17 00:00:00 2001 From: Glenn Strauss Date: Thu, 10 Aug 2017 06:46:49 -0400 Subject: [PATCH] [mod_accesslog] flush access logs every 4 seconds --- src/mod_accesslog.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/mod_accesslog.c b/src/mod_accesslog.c index 9e299397..3e6773ce 100644 --- a/src/mod_accesslog.c +++ b/src/mod_accesslog.c @@ -649,12 +649,10 @@ SETDEFAULTS_FUNC(log_access_open) { #define O_LARGEFILE 0 #endif -SIGHUP_FUNC(log_access_cycle) { +static void log_access_flush(server *srv, void *p_d) { plugin_data *p = p_d; size_t i; - if (!p->config_storage) return HANDLER_GO_ON; - for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; @@ -665,7 +663,25 @@ SIGHUP_FUNC(log_access_cycle) { buffer_reset(s->access_logbuffer); } + } +} +TRIGGER_FUNC(log_access_periodic_flush) { + /* flush buffered access logs every 4 seconds */ + if (0 == (srv->cur_ts & 3)) log_access_flush(srv, p_d); + return HANDLER_GO_ON; +} + +SIGHUP_FUNC(log_access_cycle) { + plugin_data *p = p_d; + size_t i; + + if (!p->config_storage) return HANDLER_GO_ON; + + log_access_flush(srv, p); + + for (i = 0; i < srv->config_context->used; i++) { + plugin_config *s = p->config_storage[i]; if (s->use_syslog == 0 && !buffer_string_is_empty(s->access_logfile) && s->access_logfile->ptr[0] != '|') { @@ -1126,6 +1142,7 @@ int mod_accesslog_plugin_init(plugin *p) { p->cleanup = mod_accesslog_free; p->handle_request_done = log_access_write; + p->handle_trigger = log_access_periodic_flush; p->handle_sighup = log_access_cycle; p->data = NULL;