Skip to content

Instantly share code, notes, and snippets.

@qxj
Last active October 19, 2017 06:49
Show Gist options
  • Save qxj/8a53ab70bffdaeeb801f to your computer and use it in GitHub Desktop.
Save qxj/8a53ab70bffdaeeb801f to your computer and use it in GitHub Desktop.
A simple web server with rotating file logger
#!/usr/bin/env python
"""A simple web server with rotating file logger
"""
import logging
import logging.handlers
import BaseHTTPServer
def main():
logfile = 'websvr.log'
port = 8080
# rotating logger
logger = logging.getLogger('websvr')
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(message)s')
handler = logging.handlers.RotatingFileHandler(logfile,
maxBytes=5*1024*1024,
backupCount=5)
handler.setFormatter(formatter)
logger.addHandler(handler)
# start web service
class MyHttpHandler(BaseHTTPServer.BaseHTTPRequestHandler):
# override
def log_message(self, format, *args):
logger.info("%s - - [%s] %s", self.client_address[0],
self.log_date_time_string(),
format % args)
def do_GET(self):
try:
self.send_response(200)
self.send_header('Content-type', 'text-html')
self.end_headers()
# send file content to client
self.wfile.write('Hello world')
self.wfile.write('Request path: %s' % self.path)
except IOError:
self.send_error(404, 'file not found')
try:
httpd = BaseHTTPServer.HTTPServer(('', port), MyHttpHandler)
sa = httpd.socket.getsockname()
logger.info("Serving HTTP on %s port %d ...", sa[0], sa[1])
httpd.serve_forever()
except KeyboardInterrupt:
httpd.socket.close()
logger.info("Web server is closed")
if __name__ == "__main__":
main()
#!/usr/bin/env python
"""A simple web server with rotating file logger
"""
import logging
import logging.handlers
import SimpleHTTPServer
import SocketServer
def main():
logfile = 'websvr.log'
port = 8080
## rotating logger
logger = logging.getLogger('websvr')
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(message)s')
handler = logging.handlers.RotatingFileHandler(logfile,
maxBytes=5*1024*1024,
backupCount=5)
handler.setFormatter(formatter)
logger.addHandler(handler)
## start web service
class MyHttpHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
# override
def log_message(self, format, *args):
logger.info("%s - - [%s] %s", self.client_address[0],
self.log_date_time_string(),
format % args)
try:
httpd = SocketServer.TCPServer(('', port), MyHttpHandler)
sa = httpd.socket.getsockname()
logger.info("Serving HTTP on %s port %d ...", sa[0], sa[1])
httpd.serve_forever()
except KeyboardInterrupt:
httpd.socket.close()
logger.info("Web server is closed")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment