Python2 Web服务器:不要记录来自本地主机的请求

时间:2019-01-17 13:36:20

标签: python python-2.7 webserver

以下Python2网络服务器将记录每个请求,包括来自本地主机(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 :(得分:1)

您可以使用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