這篇文章將為大家詳細(xì)講解有關(guān)如何在python中使用Filter過(guò)濾日志輸出,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
修改tornado 本身
可以到site-packages中修改tornado下的 web.py
def log_request(self, handler): """Writes a completed HTTP request to the logs. By default writes to the python root logger. To change this behavior either subclass Application and override this method, or pass a function in the application settings dictionary as ``log_function``. """ if "log_function" in self.settings: self.settings["log_function"](handler) return if handler.get_status() < 400: log_method = access_log.info elif handler.get_status() < 500: log_method = access_log.warning else: log_method = access_log.error request_time = 1000.0 * handler.request.request_time() log_method("%d %s %.2fms", handler.get_status(), handler._request_summary(), request_time)
其中 log_method = access_log.info
可以修改它,access_log
在log.py中定義,
access_log = logging.getLogger(“tornado.access”)
這里可以定義access_log的級(jí)別,然后再修改log_request的實(shí)現(xiàn),想想都復(fù)雜,而且直接修改site-packes里的庫(kù)文件是一個(gè)比較笨的方法,日后遷移會(huì)發(fā)生很多莫名其妙的問(wèn)題。
使用logging.Filter設(shè)置過(guò)濾規(guī)則
其實(shí)logging早就有了相應(yīng)的解決方法,logging庫(kù)中有一個(gè)Filterer類(lèi),logging庫(kù)中的Handler和Logger類(lèi)都是繼承自Filter類(lèi)的
Filter類(lèi)中有三個(gè)方法, addFilter(filter) , removeFilter(filter) 和 filter(record)
方法,這里主要使用addFilter和filter方法。
addFilter方法需要一個(gè)filter對(duì)象,這里我定義一個(gè)新的類(lèi),并且重寫(xiě)filter方法,
將日志名為 tornado.access 且日志級(jí)別是20的過(guò)濾掉。
class NoParsingFilter(logging.Filter): def filter(self, record): if record.name == 'tornado.access' and record.levelno == 20: return False return True
這樣我在初始化 logging對(duì)象以后,將這個(gè)過(guò)濾器添加進(jìn)去
logobj = logging.getLogger('server') logobj.addFilter(NoParsingFilter())
這樣添加一個(gè)過(guò)濾以后日志就會(huì)隨心所欲的按照自已的方式來(lái)記錄了,record也是logging的一個(gè)類(lèi) LogRecord ,常用的屬性有 name, level, pathname, lineno,msg, args, exc_info
name 就是初始化logger對(duì)象時(shí)傳入的名字
level 是級(jí)別
pathname 是哪個(gè)文件輸出的這行日志
lineno 是行號(hào)
msg 是日志本身
ps:下面看下python中過(guò)濾器filter用法
#第一個(gè)參數(shù)是一個(gè)返回bool值的一般函數(shù)或lambda函數(shù),第二個(gè)參數(shù)是一個(gè)可迭代對(duì)象 #最后返回一個(gè)可迭代對(duì)象,可以通過(guò)list獲得 def is_positive(item): return item>0 values = [1,-2,3,-4] print(filter(is_poditive,values)) a = list(filter(is_positive,values)) print(a) print(values) #output <filter object at 0x000002398A1AB4A8> [1, 3] [1, -2, 3, -4] b = list(filter(lambda item:item>0,values)) print(b) #output [1,3]
關(guān)于如何在python中使用Filter過(guò)濾日志輸出就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
新聞名稱(chēng):如何在python中使用Filter過(guò)濾日志輸出-創(chuàng)新互聯(lián)
文章地址:http://aaarwkj.com/article14/ihpge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、電子商務(wù)、外貿(mào)建站、面包屑導(dǎo)航、搜索引擎優(yōu)化、小程序開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容