From 1d7dcce98dd2116f95a00c6c956cea39a52df748 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 8 Jul 2024 14:42:48 +0200 Subject: [PATCH] Log Forwarded for address in accesslog instead of client address for gevent --- cps/gevent_wsgi.py | 24 +++++++++++++++++++++++- cps/server.py | 1 - 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/cps/gevent_wsgi.py b/cps/gevent_wsgi.py index cd9614c9..ab988401 100644 --- a/cps/gevent_wsgi.py +++ b/cps/gevent_wsgi.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . - +from datetime import datetime from gevent.pywsgi import WSGIHandler @@ -27,4 +27,26 @@ class MyWSGIHandler(WSGIHandler): env['RAW_URI'] = path return env + def format_request(self): + now = datetime.now().replace(microsecond=0) + length = self.response_length or '-' + if self.time_finish: + delta = '%.6f' % (self.time_finish - self.time_start) + else: + delta = '-' + forwarded = self.environ.get('HTTP_X_FORWARDED_FOR', None) + if forwarded: + client_address = forwarded + else: + client_address = self.client_address[0] if isinstance(self.client_address, tuple) else self.client_address + return '%s - - [%s] "%s" %s %s %s' % ( + client_address or '-', + now, + self.requestline or '', + # Use the native string version of the status, saved so we don't have to + # decode. But fallback to the encoded 'status' in case of subclasses + # (Is that really necessary? At least there's no overhead.) + (self._orig_status or self.status or '000').split()[0], + length, + delta) diff --git a/cps/server.py b/cps/server.py index 1fdc048f..dca407a7 100644 --- a/cps/server.py +++ b/cps/server.py @@ -21,7 +21,6 @@ import os import errno import signal import socket -import asyncio try: from gevent.pywsgi import WSGIServer