kore

An easy to use, scalable and secure web application framework for writing web APIs in C.
Commits | Files | Refs | README | LICENSE | git clone https://git.kore.io/kore.git

commit afd76ff55d9c3b1e2fb912c36086b0e80dc6f79f
parent f2c87fd130671e7533682f3b1b4866a1df7c94ee
Author: Joris Vink <joris@coders.se>
Date:   Thu, 28 Jun 2018 14:25:32 +0200

Change accesslog format to Combined Log Format.

Diffstat:
src/accesslog.c | 32++++++++++++++++----------------
src/http.c | 3+++
2 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/src/accesslog.c b/src/accesslog.c @@ -25,9 +25,7 @@ struct kore_log_packet { u_int8_t method; int status; - u_int16_t time_req; - u_int16_t worker_id; - u_int16_t worker_cpu; + size_t length; u_int8_t addrtype; u_int8_t addr[sizeof(struct in6_addr)]; char host[KORE_DOMAINNAME_LEN]; @@ -54,11 +52,12 @@ kore_accesslog_write(const void *data, u_int32_t len) { int l; time_t now; + struct tm *tm; ssize_t sent; struct kore_domain *dom; struct kore_log_packet logpacket; - char addr[INET6_ADDRSTRLEN]; - char *method, *buf, *tbuf, *cn; + char *method, *buf, *cn; + char addr[INET6_ADDRSTRLEN], tbuf[128]; if (len != sizeof(struct kore_log_packet)) return (KORE_RESULT_ERROR); @@ -96,7 +95,7 @@ kore_accesslog_write(const void *data, u_int32_t len) break; } - cn = "none"; + cn = "-"; #if !defined(KORE_NO_TLS) if (logpacket.cn[0] != '\0') cn = logpacket.cn; @@ -104,13 +103,16 @@ kore_accesslog_write(const void *data, u_int32_t len) if (inet_ntop(logpacket.addrtype, &(logpacket.addr), addr, sizeof(addr)) == NULL) - (void)kore_strlcpy(addr, "unknown", sizeof(addr)); + (void)kore_strlcpy(addr, "-", sizeof(addr)); time(&now); - tbuf = kore_time_to_date(now); - l = asprintf(&buf, "[%s] %s %d %s %s (w#%d) (%dms) (%s) (%s)\n", - tbuf, addr, logpacket.status, method, logpacket.path, - logpacket.worker_id, logpacket.time_req, cn, logpacket.agent); + tm = gmtime(&now); + (void)strftime(tbuf, sizeof(tbuf), "%d/%b/%Y:%H:%M:%S %z", tm); + + l = asprintf(&buf, + "%s - %s [%s] \"%s %s HTTP/1.1\" %d %zu \"-\" \"%s\"\n", + addr, cn, tbuf, method, logpacket.path, logpacket.status, + logpacket.length, logpacket.agent); if (l == -1) { kore_log(LOG_WARNING, "kore_accesslog_write(): asprintf() == -1"); @@ -126,7 +128,7 @@ kore_accesslog_write(const void *data, u_int32_t len) } if (sent != l) - kore_log(LOG_NOTICE, "accesslog: %s", buf); + kore_log(LOG_WARNING, "kore_accesslog_write(): short write"); free(buf); return (KORE_RESULT_OK); @@ -150,9 +152,7 @@ kore_accesslog(struct http_request *req) logpacket.status = req->status; logpacket.method = req->method; - logpacket.worker_id = worker->id; - logpacket.worker_cpu = worker->cpu; - logpacket.time_req = req->total; + logpacket.length = req->content_length; if (kore_strlcpy(logpacket.host, req->host, sizeof(logpacket.host)) >= sizeof(logpacket.host)) @@ -167,7 +167,7 @@ kore_accesslog(struct http_request *req) sizeof(logpacket.agent)) >= sizeof(logpacket.agent)) kore_log(LOG_NOTICE, "kore_accesslog: agent truncated"); } else { - (void)kore_strlcpy(logpacket.agent, "unknown", + (void)kore_strlcpy(logpacket.agent, "-", sizeof(logpacket.agent)); } diff --git a/src/http.c b/src/http.c @@ -1766,6 +1766,9 @@ http_response_normal(struct http_request *req, struct connection *c, if (!(c->flags & CONN_CLOSE_EMPTY)) net_recv_reset(c, http_header_max, http_header_recv); + + if (req != NULL) + req->content_length = len; } static void