log filtering by url regex

This commit is contained in:
ed 2021-05-16 07:29:34 +02:00
parent 0fcfe79994
commit 78ba16f722
3 changed files with 33 additions and 29 deletions

View file

@ -272,11 +272,12 @@ def run_argparse(argv, formatter):
ap2.add_argument("--ssl-dbg", action="store_true", help="dump some tls info") ap2.add_argument("--ssl-dbg", action="store_true", help="dump some tls info")
ap2.add_argument("--ssl-log", metavar="PATH", help="log master secrets") ap2.add_argument("--ssl-log", metavar="PATH", help="log master secrets")
ap2 = ap.add_argument_group('Debug options') ap2 = ap.add_argument_group('debug options')
ap2.add_argument("--log-conn", action="store_true", help="print tcp-server msgs") ap2.add_argument("--log-conn", action="store_true", help="print tcp-server msgs")
ap2.add_argument("--no-sendfile", action="store_true", help="disable sendfile") ap2.add_argument("--no-sendfile", action="store_true", help="disable sendfile")
ap2.add_argument("--no-scandir", action="store_true", help="disable scandir") ap2.add_argument("--no-scandir", action="store_true", help="disable scandir")
ap2.add_argument("--ihead", metavar="HEADER", action='append', help="dump incoming header") ap2.add_argument("--ihead", metavar="HEADER", action='append', help="dump incoming header")
ap2.add_argument("--lf-url", metavar="RE", type=str, default=r"^/\.cpr/", help="dont log URLs matching")
return ap.parse_args(args=argv[1:]) return ap.parse_args(args=argv[1:])
# fmt: on # fmt: on

View file

@ -158,6 +158,8 @@ class HttpCli(object):
uparam["b"] = False uparam["b"] = False
cookies["b"] = False cookies["b"] = False
self.do_log = not self.conn.lf_url or not self.conn.lf_url.match(self.req)
try: try:
if self.mode in ["GET", "HEAD"]: if self.mode in ["GET", "HEAD"]:
return self.handle_get() and self.keepalive return self.handle_get() and self.keepalive
@ -264,6 +266,7 @@ class HttpCli(object):
self.reply(html) self.reply(html)
def handle_get(self): def handle_get(self):
if self.do_log:
logmsg = "{:4} {}".format(self.mode, self.req) logmsg = "{:4} {}".format(self.mode, self.req)
if "range" in self.headers: if "range" in self.headers:
@ -315,7 +318,9 @@ class HttpCli(object):
return self.tx_browser() return self.tx_browser()
def handle_options(self): def handle_options(self):
if self.do_log:
self.log("OPTIONS " + self.req) self.log("OPTIONS " + self.req)
self.send_headers( self.send_headers(
None, None,
204, 204,
@ -836,23 +841,11 @@ class HttpCli(object):
self.log("{} {}".format(vspd, msg)) self.log("{} {}".format(vspd, msg))
if not nullwrite: if not nullwrite:
# TODO this is bad
log_fn = "up.{:.6f}.txt".format(t0) log_fn = "up.{:.6f}.txt".format(t0)
with open(log_fn, "wb") as f: with open(log_fn, "wb") as f:
f.write( ft = "{}:{}".format(self.ip, self.addr[1])
( ft = "{}\n{}\n{}\n".format(ft, msg.rstrip(), errmsg)
"\n".join( f.write(ft.encode("utf-8"))
unicode(x)
for x in [
":".join(unicode(x) for x in [self.ip, self.addr[1]]),
msg.rstrip(),
]
)
+ "\n"
+ errmsg
+ "\n"
).encode("utf-8")
)
self.redirect(self.vpath, msg=msg, flavor="return to") self.redirect(self.vpath, msg=msg, flavor="return to")
self.parser.drop() self.parser.drop()
@ -1120,7 +1113,9 @@ class HttpCli(object):
logmsg += unicode(status) + logtail logmsg += unicode(status) + logtail
if self.mode == "HEAD" or not do_send: if self.mode == "HEAD" or not do_send:
if self.do_log:
self.log(logmsg) self.log(logmsg)
return True return True
ret = True ret = True
@ -1134,7 +1129,9 @@ class HttpCli(object):
logmsg += " \033[31m" + unicode(upper - remains) + "\033[0m" logmsg += " \033[31m" + unicode(upper - remains) + "\033[0m"
spd = self._spd((upper - lower) - remains) spd = self._spd((upper - lower) - remains)
if self.do_log:
self.log("{}, {}".format(logmsg, spd)) self.log("{}, {}".format(logmsg, spd))
return ret return ret
def tx_zip(self, fmt, uarg, vn, rem, items, dots): def tx_zip(self, fmt, uarg, vn, rem, items, dots):
@ -1243,7 +1240,9 @@ class HttpCli(object):
logmsg += unicode(status) logmsg += unicode(status)
if self.mode == "HEAD" or not do_send: if self.mode == "HEAD" or not do_send:
if self.do_log:
self.log(logmsg) self.log(logmsg)
return True return True
try: try:
@ -1257,7 +1256,9 @@ class HttpCli(object):
self.log(logmsg + " \033[31md/c\033[0m") self.log(logmsg + " \033[31md/c\033[0m")
return False return False
if self.do_log:
self.log(logmsg + " " + unicode(len(html))) self.log(logmsg + " " + unicode(len(html)))
return True return True
def tx_mounts(self): def tx_mounts(self):

View file

@ -1,6 +1,7 @@
# coding: utf-8 # coding: utf-8
from __future__ import print_function, unicode_literals from __future__ import print_function, unicode_literals
import re
import os import os
import sys import sys
import time import time
@ -38,6 +39,7 @@ class HttpConn(object):
self.workload = 0 self.workload = 0
self.u2idx = None self.u2idx = None
self.log_func = hsrv.log self.log_func = hsrv.log
self.lf_url = re.compile(self.args.lf_url) if self.args.lf_url else None
self.set_rproxy() self.set_rproxy()
def set_rproxy(self, ip=None): def set_rproxy(self, ip=None):