Python日志需要我們不斷的學習
Python日志在不斷的發(fā)展中需要我們不斷的進行學習。只有不斷的進行學習才能更好的掌握相關(guān)的使用方法。下面我們就詳細的介紹相關(guān)代碼的書寫方式。希望對大家有所幫助。
一眼可知,類實現(xiàn)的是一個簡單的template模式,定義了setup, handle, finish讓繼承者重載,模式方法__init__則定義了三個方法的調(diào)用順序同時保證三個方法的運行。 很顯然,如果我們要在退出時關(guān)閉連接,重定義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+')
不過實際使用中需要做一點點的補充。因為在多線程程序中,要記錄日志需要線程相關(guān)的唯一ID來識別一些東西。我沒有找到直接的線程ID(哪位兄弟找到了請告知),但Python中有一個名為id的內(nèi)建函數(shù),用來返回一個對象的identity (注1)。將要記錄的信息預(yù)定義一個模板,我們就能得到一個漂亮的輸出了。
- 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來幫助把一串二進制轉(zhuǎn)成可見的ASCII,象接收到的數(shù)據(jù)就***用b2a_hex轉(zhuǎn)換后再記日志。
【編輯推薦】