mirror of
https://github.com/emikulic/darkhttpd.git
synced 2023-08-10 21:13:08 +03:00
Add support for logging with syslog.
The motivation is that with busybox, the implementation of syslog has a builtin log rotation. So I don't need an external logrotate for darkhttpd.
This commit is contained in:
parent
f72e8d6afe
commit
2b37151afc
23
darkhttpd.c
23
darkhttpd.c
@ -67,6 +67,7 @@ static const int debug = 1;
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <syslog.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
@ -304,7 +305,7 @@ static char *server_hdr = NULL;
|
|||||||
static char *auth_key = NULL;
|
static char *auth_key = NULL;
|
||||||
static uint64_t num_requests = 0, total_in = 0, total_out = 0;
|
static uint64_t num_requests = 0, total_in = 0, total_out = 0;
|
||||||
static int accepting = 1; /* set to 0 to stop accept()ing */
|
static int accepting = 1; /* set to 0 to stop accept()ing */
|
||||||
|
static int syslog_enabled = 0;
|
||||||
static volatile int running = 1; /* signal handler sets this to false */
|
static volatile int running = 1; /* signal handler sets this to false */
|
||||||
|
|
||||||
#define INVALID_UID ((uid_t) -1)
|
#define INVALID_UID ((uid_t) -1)
|
||||||
@ -895,6 +896,8 @@ static void usage(const char *argv0) {
|
|||||||
"\t\tSpecifies how many concurrent connections to accept.\n\n");
|
"\t\tSpecifies how many concurrent connections to accept.\n\n");
|
||||||
printf("\t--log filename (default: stdout)\n"
|
printf("\t--log filename (default: stdout)\n"
|
||||||
"\t\tSpecifies which file to append the request log to.\n\n");
|
"\t\tSpecifies which file to append the request log to.\n\n");
|
||||||
|
printf("\t--syslog\n"
|
||||||
|
"\t\tUse syslog for request log.\n\n");
|
||||||
printf("\t--chroot (default: don't chroot)\n"
|
printf("\t--chroot (default: don't chroot)\n"
|
||||||
"\t\tLocks server into wwwroot directory for added security.\n\n");
|
"\t\tLocks server into wwwroot directory for added security.\n\n");
|
||||||
printf("\t--daemon (default: don't daemonize)\n"
|
printf("\t--daemon (default: don't daemonize)\n"
|
||||||
@ -1116,6 +1119,9 @@ static void parse_commandline(const int argc, char *argv[]) {
|
|||||||
else if (strcmp(argv[i], "--accf") == 0) {
|
else if (strcmp(argv[i], "--accf") == 0) {
|
||||||
want_accf = 1;
|
want_accf = 1;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(argv[i], "--syslog") == 0) {
|
||||||
|
syslog_enabled = 1;
|
||||||
|
}
|
||||||
else if (strcmp(argv[i], "--forward") == 0) {
|
else if (strcmp(argv[i], "--forward") == 0) {
|
||||||
const char *host, *url;
|
const char *host, *url;
|
||||||
if (++i >= argc)
|
if (++i >= argc)
|
||||||
@ -1319,7 +1325,18 @@ static void log_connection(const struct connection *conn) {
|
|||||||
make_safe(user_agent);
|
make_safe(user_agent);
|
||||||
|
|
||||||
#define use_safe(x) safe_##x ? safe_##x : ""
|
#define use_safe(x) safe_##x ? safe_##x : ""
|
||||||
|
if (syslog_enabled) {
|
||||||
|
syslog(LOG_INFO, "%s - - %s \"%s %s HTTP/1.1\" %d %llu \"%s\" \"%s\"\n",
|
||||||
|
get_address_text(&conn->client),
|
||||||
|
clf_date(dest, now),
|
||||||
|
use_safe(method),
|
||||||
|
use_safe(url),
|
||||||
|
conn->http_code,
|
||||||
|
llu(conn->total_sent),
|
||||||
|
use_safe(referer),
|
||||||
|
use_safe(user_agent)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
fprintf(logfile, "%s - - %s \"%s %s HTTP/1.1\" %d %llu \"%s\" \"%s\"\n",
|
fprintf(logfile, "%s - - %s \"%s %s HTTP/1.1\" %d %llu \"%s\" \"%s\"\n",
|
||||||
get_address_text(&conn->client),
|
get_address_text(&conn->client),
|
||||||
clf_date(dest, now),
|
clf_date(dest, now),
|
||||||
@ -1331,7 +1348,7 @@ static void log_connection(const struct connection *conn) {
|
|||||||
use_safe(user_agent)
|
use_safe(user_agent)
|
||||||
);
|
);
|
||||||
fflush(logfile);
|
fflush(logfile);
|
||||||
|
}
|
||||||
#define free_safe(x) if (safe_##x) free(safe_##x)
|
#define free_safe(x) if (safe_##x) free(safe_##x)
|
||||||
|
|
||||||
free_safe(method);
|
free_safe(method);
|
||||||
|
Loading…
Reference in New Issue
Block a user