Python日志在不断的发展中需要我们不断的进行学习。只有不断的进行学习才能更好的掌握相关的使用方法。下面我们就详细的介绍相关代码的书写方式。希望对大家有所帮助。
一眼可知,类实现的是一个简单的template模式,定义了setup, handle, finish让继承者重载,模式方法__init__则定义了三个方法的调用顺序同时保证三个方法的运行。 很显然,如果我们要在退出时关闭连接,重定义finish是一个很自然的行为。
- def finish(self):
- self.request.close()
第二个问题,如何记日志。Python有日志模块logging。
- import logging
- logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s %(levelname)s %(message)s',
- filename='log.txt',
- filemode='a+')
不过实际使用中需要做一点点的补充。因为在多线程程序中,要记录日志需要线程相关的唯一ID来识别一些东西。我没有找到直接的线程ID(哪位兄弟找到了请告知),但Python中有一个名为id的内建函数,用来返回一个对象的identity (注1)。将要记录的信息预定义一个模板,我们就能得到一个漂亮的输出了。
- def LogTemplate(self, s):
- return '[id.' + str(id(self.request)) + ']: ' + str(s)def Log(self, s):
- ss = self.LogTemplate(s)
- print ss
- logging.info(ss)
- def LogErr(self, s):
- ss = self.LogTemplate(s)
- print ss
- logging.error(ss)
下面我们可以这样写了
- def setup(self):
- self.Log('进入处理线程')
- def finish(self):
- self.request.close()
- self.Log("退出处理线程")
另外模块binascii对Python日志也很有用,我就会用到binascii.b2a_hex来帮助把一串二进制转成可见的ASCII,象接收到的数据就***用b2a_hex转换后再记日志。
【编辑推荐】