xref: /plan9/sys/src/cmd/ip/httpd/log.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
180ee5cbfSDavid du Colombier #include <u.h>
280ee5cbfSDavid du Colombier #include <libc.h>
380ee5cbfSDavid du Colombier #include "httpd.h"
480ee5cbfSDavid du Colombier #include "httpsrv.h"
580ee5cbfSDavid du Colombier 
680ee5cbfSDavid du Colombier int		logall[2];
780ee5cbfSDavid du Colombier 
880ee5cbfSDavid du Colombier void
980ee5cbfSDavid du Colombier logit(HConnect *c, char *fmt, ...)
1080ee5cbfSDavid du Colombier {
1180ee5cbfSDavid du Colombier 	char buf[4096];
1280ee5cbfSDavid du Colombier 	va_list arg;
1380ee5cbfSDavid du Colombier 	HSPriv *p;
1480ee5cbfSDavid du Colombier 
1580ee5cbfSDavid du Colombier 	va_start(arg, fmt);
16*9a747e4fSDavid du Colombier 	vseprint(buf, buf+sizeof(buf), fmt, arg);
1780ee5cbfSDavid du Colombier 	va_end(arg);
1880ee5cbfSDavid du Colombier 	p = nil;
1980ee5cbfSDavid du Colombier 	if(c != nil)
2080ee5cbfSDavid du Colombier 		p = c->private;
2180ee5cbfSDavid du Colombier 	if(p != nil && p->remotesys != nil)
2280ee5cbfSDavid du Colombier 		syslog(0, HTTPLOG, "%s %s", p->remotesys, buf);
2380ee5cbfSDavid du Colombier 	else
2480ee5cbfSDavid du Colombier 		syslog(0, HTTPLOG, "%s", buf);
2580ee5cbfSDavid du Colombier }
2680ee5cbfSDavid du Colombier 
2780ee5cbfSDavid du Colombier void
2880ee5cbfSDavid du Colombier writelog(HConnect *c, char *fmt, ...)
2980ee5cbfSDavid du Colombier {
3080ee5cbfSDavid du Colombier 	HSPriv *p;
3180ee5cbfSDavid du Colombier 	char buf[HBufSize+500], *bufp, *bufe;
3280ee5cbfSDavid du Colombier 	ulong now, today;
3380ee5cbfSDavid du Colombier 	int logfd;
3480ee5cbfSDavid du Colombier 	va_list arg;
3580ee5cbfSDavid du Colombier 
3680ee5cbfSDavid du Colombier 	bufe = buf + sizeof(buf);
3780ee5cbfSDavid du Colombier 	now = time(nil);
3880ee5cbfSDavid du Colombier 	today = now / (24*60*60);
3980ee5cbfSDavid du Colombier 	logfd = logall[today & 1];
4080ee5cbfSDavid du Colombier 	if(c == nil || logfd <= 0)
4180ee5cbfSDavid du Colombier 		return;
4280ee5cbfSDavid du Colombier 	p = c->private;
4380ee5cbfSDavid du Colombier 	if(c->hstop == c->header || c->hstop[-1] != '\n')
4480ee5cbfSDavid du Colombier 		*c->hstop = '\n';
4580ee5cbfSDavid du Colombier 	*c->hstop = '\0';
4680ee5cbfSDavid du Colombier 	bufp = seprint(buf, bufe, "==========\n");
4780ee5cbfSDavid du Colombier 	bufp = seprint(bufp, bufe, "LogTime:  %D\n", now);
4880ee5cbfSDavid du Colombier 	bufp = seprint(bufp, bufe, "ConnTime: %D\n", c->reqtime);
4980ee5cbfSDavid du Colombier 	bufp = seprint(bufp, bufe, "RemoteIP: %s\n", p->remotesys);
5080ee5cbfSDavid du Colombier 	bufp = seprint(bufp, bufe, "Port: %s\n", p->remoteserv);
5180ee5cbfSDavid du Colombier 	va_start(arg, fmt);
52*9a747e4fSDavid du Colombier 	bufp = vseprint(bufp, bufe, fmt, arg);
5380ee5cbfSDavid du Colombier 	va_end(arg);
5480ee5cbfSDavid du Colombier 	if(c->req.uri != nil && c->req.uri[0] != 0)
5580ee5cbfSDavid du Colombier 		bufp = seprint(bufp, bufe, "FinalURI: %s\n", c->req.uri);
5680ee5cbfSDavid du Colombier 	bufp = seprint(bufp, bufe, "----------\n%s\n", (char*)c->header);
5780ee5cbfSDavid du Colombier 	write(logfd, buf, bufp-buf);   /* append-only file */
5880ee5cbfSDavid du Colombier }
59