Веб-сервер Python2: не регистрировать запрос от localhost - PullRequest
0 голосов
/ 17 января 2019

Следующий веб-сервер Python2 будет регистрировать каждый отдельный запрос, включая запрос от localhost (127.0.0.1).

webserver.py

import SimpleHTTPServer, SocketServer, sys
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
port = 80
httpd = SocketServer.TCPServer(("", port), Handler)
sys.stderr = open('/home/user/log.txt', 'w', 1)
httpd.serve_forever()

как пример; curl localhost (с той же машины) создаст следующий журнал.

10.0.0.1  - - [10/Jan/2019 00:00:00] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [10/Jan/2019 00:00:01] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [10/Jan/2019 00:01:01] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [10/Jan/2019 00:02:02] "GET / HTTP/1.1" 200 -

Мой вопрос: можно ли сделать исключение для локального запроса? Я не хочу регистрировать любые запросы от localhost / 127.0.0.1.

Я думаю, что-то вроде этого, но пока не совсем уверен, как реализовать это в Python2.

webserver_v2_do_not_log_localhost.py

import webserver.py # webserver code above, or simply paste everything in here.

if SourceIPAddress == 127.0.0.1:
    print('DO NOT log request from localhost/127.0.0.1')
    # Script here
else:
    print('Log everything')
    # Script here

Любая идея сценариев будет принята с благодарностью. Спасибо

Требуемый вывод при выполнении tail -F log.txt (только внешний IP, не localhost)

10.0.0.1  - - [10/Jan/2019 00:00:00] "GET / HTTP/1.1" 200 -

1 Ответ

0 голосов
/ 17 января 2019

Вы можете использовать logging.Filter класс. Когда вы объявите свой логгер, сделайте что-то вроде этого:

import logging

logging.basicConfig(filename='myapp.log', level=logging.INFO)
class Global:
    SourceIPAddress = ''


class IpFilter(logging.Filter):
    def filter(self, rec):#the rec is part of the function signature.
        return not Global.SourceIPAddress == '127.0.0.1'


def main():



    log = logging.getLogger('myLogger')
    log.addFilter(IpFilter())
    log.info("log")
    Global.SourceIPAddress = '127.0.0.1'
    log.info("Don't log")

if __name__ == '__main__':
    main()

Конечно, я реализовал это очень простым способом, и вы должны сохранить IP в лучшем месте (:

Я также проверил бы эти ссылки для получения дополнительной информации:
https://docs.python.org/3/howto/logging-cookbook.html https://www.programcreek.com/python/example/3364/logging.Filter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...