對(duì)Python環(huán)境變量進(jìn)行述說介紹
Python環(huán)境變量具有一個(gè)強(qiáng)大靈活的工業(yè)級(jí)的記錄模塊,該模塊能夠在不同的層次把消息記錄到任意位置,例如內(nèi)存、文件、網(wǎng)絡(luò)和控制臺(tái)等。要想使用該模塊,需要進(jìn)行必要的配置。
對(duì)于那些想要提供日志記錄的程序庫,可以選擇讓用戶使用程序庫的默認(rèn)配置(這樣不會(huì)打擾用戶),或者選擇讓用戶親自配置日志記錄功能。當(dāng)然,如果您是一位程序庫開發(fā)人員的話,***替用戶搭理好一切,而不是去惹他們討厭。那么,你的程序庫配置本身應(yīng)該做哪些設(shè)置呢?
這里有兩個(gè)常見的選項(xiàng):將記錄寫到一個(gè)文件中,或者寫到控制臺(tái)。不過這兩個(gè)選項(xiàng)都會(huì)導(dǎo)致混亂。直到Python環(huán)境變量,***實(shí)踐要求程序庫開發(fā)人員包含一個(gè)小型的do-nothing處理程序。
并配置它的logger使用這個(gè)處理程序。Python 3.1將這種NullHandler作為記錄模塊本身的一部分。下面我們舉例進(jìn)行說明。假設(shè)您的lib.py模塊中含有下面所示的程序庫代碼。這里有一個(gè)接收日志記錄處理程序的init()函數(shù),但是默認(rèn)時(shí)接收的卻是新的NullHandler。
之后,將logger對(duì)象設(shè)置為使用提供的logger(或者默認(rèn)的logger)。日志記錄處理程序是一個(gè)對(duì)象,它確定把記錄輸出到何處。這里的示例函數(shù)a_function_that_uses_logging()調(diào)用了全局logger對(duì)象,并記錄一些有趣的消息:
- import HTMLParser
- import urllib
- import sys
- #定義HTML解析器
- class parseLinks(HTMLParser.HTMLParser):
- def handle_starttag(self, tag, attrs):
- if tag == 'a':
- for name,value in attrs:
- if name == 'href':
- print value
- print self.get_starttag_text()
- #創(chuàng)建HTML解析器的實(shí)例
- lParser = parseLinks()
- #打開HTML文件
- lParser.feed(urllib.urlopen( \
- "http://www.python.org/index.html").read())
- lParser.close()
為此,我們的代碼將此處理程序配置為每個(gè)日志文件只保存250字節(jié)內(nèi)容,并且最多維護(hù)5個(gè)備份文件。***,代碼調(diào)用a_function_that_uses_logging()函數(shù)。下面的應(yīng)用程序代碼配置了一個(gè)回旋式文件處理程序,這是一個(gè)改進(jìn)過的處理程序,可用于長期運(yùn)行的系統(tǒng),因?yàn)檫@些系統(tǒng)會(huì)生成大量的日志信息。
此處理程序會(huì)限制每個(gè)文件中日志記錄信息的數(shù)量,并且還保持了一個(gè)備份文件的預(yù)設(shè)數(shù)量。這些限制能夠保證日志文件不會(huì)超過規(guī)定尺寸,并且總是保留(達(dá)到此限制之前的)***的日志記錄信息。
這種做法很好,因?yàn)橛袝r(shí)候用戶并不關(guān)心記錄的消息——他們想要的是在調(diào)用函數(shù)時(shí)無需配置logger,并且這些日志不會(huì)耗盡他們的硬盤空間,也不會(huì)出現(xiàn)滿屏的消息。這時(shí),NullHandler正好可以派上用場。
下面的代碼所做的事情與上面一致,不過它并沒有配置日志記錄處理程序,所以也就得不到日志記錄結(jié)果。注意,這里沒有導(dǎo)入logging和logging.handlers,并且也沒有確定使用哪個(gè)處理程序以及如何對(duì)Python環(huán)境變量說明。
【編輯推薦】