Python日志需要我们不断的学习


Python日志在不断的发展中需要我们不断的进行学习。只有不断的进行学习才能更好的掌握相关的使用方法。下面我们就详细的介绍相关代码的书写方式。希望对大家有所帮助。

一眼可知,类实现的是一个简单的template模式,定义了setup, handle, finish让继承者重载,模式方法__init__则定义了三个方法的调用顺序同时保证三个方法的运行。 很显然,如果我们要在退出时关闭连接,重定义finish是一个很自然的行为。

  1. def finish(self):  
  2. self.request.close() 

第二个问题,如何记日志。Python有日志模块logging。

  1. import logging  
  2. logging.basicConfig(level=logging.DEBUG,  
  3. format='%(asctime)s %(levelname)s %(message)s',  
  4. filename='log.txt',  
  5. filemode='a+'

不过实际使用中需要做一点点的补充。因为在多线程程序中,要记录日志需要线程相关的唯一ID来识别一些东西。我没有找到直接的线程ID哪位兄弟找到了请告知),但Python中有一个名为id的内建函数,用来返回一个对象的identity 注1)。将要记录的信息预定义一个模板,我们就能得到一个漂亮的输出了。

  1. def LogTemplate(self, s):  
  2. return '[id.' + str(id(self.request)) + ']: ' + str(s)def Log(self, s):  
  3. ss = self.LogTemplate(s)  
  4. print ss  
  5. logging.info(ss)  
  6. def LogErr(self, s):  
  7. ss = self.LogTemplate(s)  
  8. print ss  
  9. logging.error(ss) 

下面我们可以这样写了

  1. def setup(self):  
  2. self.Log('进入处理线程')  
  3. def finish(self):  
  4. self.request.close()  
  5. self.Log("退出处理线程") 

另外模块binascii对Python日志也很有用,我就会用到binascii.b2a_hex来帮助把一串二进制转成可见的ASCII,象接收到的数据就最好用b2a_hex转换后再记日志。

相关内容

    暂无相关文章

评论关闭