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:
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