要将日志记录添加到带有时间戳的文件中,您可以使用logging
module:
import logging
logging.basicConfig(level=logging.INFO,
filename='myserver.log', # log to this file
format='%(asctime)s %(message)s') # include timestamp
logging.info("some message")
如果你运行代码;你应该看到myserver.log
(+/- 您的时区和当前时间):
2013-12-24 09:20:17,739 some message
这是 TCP 服务器的完整示例,它将从客户端接收的每个行添加到前面:"Sent by Client: "
短语并将其发回:
#!/usr/bin/env python
import logging
import sys
from SocketServer import ThreadingTCPServer, StreamRequestHandler
info = logging.getLogger(__name__).info
class EchoLineHandler(StreamRequestHandler):
def handle(self):
info("handling request from %s", self.client_address)
# prepend each line (b'\n') and send it back
for line in self.rfile:
self.wfile.write(b"Sent by Client: ") # assume ascii-based encoding
self.wfile.write(line)
info("done %s", self.client_address)
def test(ServerClass=ThreadingTCPServer, HandlerClass=EchoLineHandler):
# configure logging
logging.basicConfig(level=logging.INFO,
filename='server.log', # log to this file
format='%(asctime)s %(message)s') # include timestamp
# parse command line arguments
host, port = 'localhost', 8826
if len(sys.argv) > 1:
host_, separator, port_ = sys.argv[1].rpartition(":")
port = int(port_)
if separator: # if ":" in sys.argv[1]
host = host_ # accept any host, including empty
# listen for connections
server = ServerClass((host, port), HandlerClass)
info("Serving on %s port %s", *server.server_address)
try:
server.serve_forever()
finally:
info("quit.")
if __name__=="__main__":
test()
如果代码保存在则运行服务器echo_line_server.py
:
$ python -mecho_line_server localhost:8826 & tail -F server.log
2013-12-24 17:09:38,089 Serving on 127.0.0.1 port 8826
运行客户端:
$ echo abc | nc localhost 8826
Sent by Client: abc