Save Logs - SimpleHTTPServer

How to save output from the console, for example

"192.168.1.1 - - [18 / Aug / 2014 12:05:59] code 404, message File not found"

to file?

Here is the code:

import SimpleHTTPServer import SocketServer PORT = 1548 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print "serving at port", PORT httpd.serve_forever() 
+5
source share
2 answers

BaseHTTPRequestHandler.log_message() prints all log messages, writing sys.stderr . You have two options:

1) Continue to use BaseHTTPRequestHandler.log_message() , but change the sys.stderr value:

 import SimpleHTTPServer import SocketServer PORT = 1548 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print "serving at port", PORT import sys buffer = 1 sys.stderr = open('logfile.txt', 'w', buffer) httpd.serve_forever() 

2) Create a new xxxRequestHandler class by replacing .log_message() :

 import SimpleHTTPServer import SocketServer import sys PORT = 1548 class MyHTTPHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): buffer = 1 log_file = open('logfile.txt', 'w', buffer) def log_message(self, format, *args): self.log_file.write("%s - - [%s] %s\n" % (self.client_address[0], self.log_date_time_string(), format%args)) Handler = MyHTTPHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print "serving at port", PORT httpd.serve_forever() 
+12
source

I used BaseHTTPServer instead of SimpleHTTPServer.

There you go:

 #!/usr/bin/python from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer PORT_NUMBER = 5451 #This class will handles any incoming request from #the browser class myHandler(BaseHTTPRequestHandler): #Handler for the GET requests def do_GET(self): self.send_response(200) #self.send_header('Content-type','text/html') self.end_headers() text_file = open("ip.txt", "a") text_file.write(str(self.client_address) + "\n") text_file.close() # Send the html message #self.wfile.write("Hello World !") return try: #Create a web server and define the handler to manage the #incoming request server = HTTPServer(('', PORT_NUMBER), myHandler) print 'Started httpserver on port ' , PORT_NUMBER #Wait forever for incoming htto requests server.serve_forever() except KeyboardInterrupt: print '^C received, shutting down the web server' server.socket.close() 
0
source

Source: https://habr.com/ru/post/1200575/


All Articles