Python日志需要我們不斷的學(xué)習(xí)
Python日志在不斷的發(fā)展中需要我們不斷的進(jìn)行學(xué)習(xí)。只有不斷的進(jìn)行學(xué)習(xí)才能更好的掌握相關(guān)的使用方法。下面我們就詳細(xì)的介紹相關(guān)代碼的書寫方式。希望對(duì)大家有所幫助。
一眼可知,類實(shí)現(xiàn)的是一個(gè)簡(jiǎn)單的template模式,定義了setup, handle, finish讓繼承者重載,模式方法__init__則定義了三個(gè)方法的調(diào)用順序同時(shí)保證三個(gè)方法的運(yùn)行。 很顯然,如果我們要在退出時(shí)關(guān)閉連接,重定義finish是一個(gè)很自然的行為。
- def finish(self):
- self.request.close()
第二個(gè)問題,如何記日志。Python有日志模塊logging。
- import logging
- logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s %(levelname)s %(message)s',
- filename='log.txt',
- filemode='a+')
不過實(shí)際使用中需要做一點(diǎn)點(diǎn)的補(bǔ)充。因?yàn)樵诙嗑€程程序中,要記錄日志需要線程相關(guān)的唯一ID來(lái)識(shí)別一些東西。我沒有找到直接的線程ID(哪位兄弟找到了請(qǐng)告知),但Python中有一個(gè)名為id的內(nèi)建函數(shù),用來(lái)返回一個(gè)對(duì)象的identity (注1)。將要記錄的信息預(yù)定義一個(gè)模板,我們就能得到一個(gè)漂亮的輸出了。
- 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('進(jìn)入處理線程')
- def finish(self):
- self.request.close()
- self.Log("退出處理線程")
另外模塊binascii對(duì)Python日志也很有用,我就會(huì)用到binascii.b2a_hex來(lái)幫助把一串二進(jìn)制轉(zhuǎn)成可見的ASCII,象接收到的數(shù)據(jù)就***用b2a_hex轉(zhuǎn)換后再記日志。
【編輯推薦】