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转换后再记日志。