mirror of
https://github.com/cesanta/mongoose.git
synced 2025-01-17 12:58:19 +08:00
45 lines
1.3 KiB
C
45 lines
1.3 KiB
C
#include "internal.h"
|
|
|
|
static void log_header(const struct mg_connection *conn, const char *header,
|
|
FILE *fp) {
|
|
const char *header_value;
|
|
|
|
if ((header_value = mg_get_header(conn, header)) == NULL) {
|
|
(void) fprintf(fp, "%s", " -");
|
|
} else {
|
|
(void) fprintf(fp, " \"%s\"", header_value);
|
|
}
|
|
}
|
|
|
|
static void log_access(const struct mg_connection *conn) {
|
|
const struct mg_request_info *ri;
|
|
FILE *fp;
|
|
char date[64], src_addr[IP_ADDR_STR_LEN];
|
|
|
|
fp = conn->ctx->config[ACCESS_LOG_FILE] == NULL ? NULL :
|
|
fopen(conn->ctx->config[ACCESS_LOG_FILE], "a+");
|
|
|
|
if (fp == NULL)
|
|
return;
|
|
|
|
strftime(date, sizeof(date), "%d/%b/%Y:%H:%M:%S %z",
|
|
localtime(&conn->birth_time));
|
|
|
|
ri = &conn->request_info;
|
|
flockfile(fp);
|
|
|
|
sockaddr_to_string(src_addr, sizeof(src_addr), &conn->client.rsa);
|
|
fprintf(fp, "%s - %s [%s] \"%s %s HTTP/%s\" %d %" INT64_FMT,
|
|
src_addr, ri->remote_user == NULL ? "-" : ri->remote_user, date,
|
|
ri->request_method ? ri->request_method : "-",
|
|
ri->uri ? ri->uri : "-", ri->http_version,
|
|
conn->status_code, conn->num_bytes_sent);
|
|
log_header(conn, "Referer", fp);
|
|
log_header(conn, "User-Agent", fp);
|
|
fputc('\n', fp);
|
|
fflush(fp);
|
|
|
|
funlockfile(fp);
|
|
fclose(fp);
|
|
}
|