欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Filter過(guò)濾python中的日志輸出的實(shí)現(xiàn)方法

 更新時(shí)間:2019年07月17日 09:41:26   作者:楊彥星  
這篇文章主要介紹了使用Filter過(guò)濾python中的日志輸出,本文給大家分享幾種方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

事情是這樣的,我寫(xiě)了一個(gè)tornado的服務(wù),過(guò)程當(dāng)中我用logging記錄一些內(nèi)容,由于一開(kāi)始并沒(méi)有仔細(xì)觀(guān)察tornado自已的日志管理,所以我就一般用debug來(lái)記錄普通日志,error記錄有問(wèn)題的日志,但是當(dāng)服務(wù)跑起來(lái)以后才發(fā)現(xiàn),tornado的訪(fǎng)問(wèn)日志的級(jí)別是info,也就是20,debug是10的,所以如果我定義了日志的級(jí)別是debug,那么默認(rèn)情況下肯定也會(huì)輸出到日志文件中的。

但是我現(xiàn)在并不關(guān)心訪(fǎng)問(wèn)日志,而且由于我這個(gè)服務(wù)可能每時(shí)每刻都會(huì)有訪(fǎng)問(wèn),這樣在我對(duì)日志信息進(jìn)行搜索的時(shí)候就會(huì)有很大的影響。

該怎么辦呢?

有以下幾種辦法

修改初始化日志時(shí)的級(jí)別

一種是修改我初始化時(shí)定義的日志級(jí)別,定成比info還高的,這樣就不會(huì)再記錄info的日志了

但是這種方法需要我將之前記錄日志的 debug 方法也要修改為比info更高的級(jí)別,也就是要大于20。修改的地方有點(diǎn)多,且我已經(jīng)習(xí)慣了用 debug 來(lái)記錄,改起來(lái)成本有點(diǎn)大。

修改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]

總結(jié)

以上所述是小編給大家介紹的使用Filter過(guò)濾python中的日志輸出,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Python高級(jí)用法總結(jié)

    Python高級(jí)用法總結(jié)

    Python很棒,它有很多高級(jí)用法值得細(xì)細(xì)思索,學(xué)習(xí)使用。本文將根據(jù)日常使用,總結(jié)介紹Python的一組高級(jí)特性,包括:列表推導(dǎo)式、迭代器和生成器、裝飾器
    2018-05-05
  • Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module named ‘pymssql‘的解決方法

    Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module 

    這篇文章給大家介紹了Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module named ‘pymssql‘的解決方法,如果有遇到相同問(wèn)題的朋友可以參考閱讀一下本文
    2023-10-10
  • Python編程pygal繪圖實(shí)例之XY線(xiàn)

    Python編程pygal繪圖實(shí)例之XY線(xiàn)

    這篇文章主要介紹了Python編程pygal繪圖實(shí)例之XY線(xiàn),具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 如何在keras中添加自己的優(yōu)化器(如adam等)

    如何在keras中添加自己的優(yōu)化器(如adam等)

    這篇文章主要介紹了在keras中實(shí)現(xiàn)添加自己的優(yōu)化器(如adam等)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 解決pyinstaller打包exe可執(zhí)行文件后運(yùn)行找不到pandas或者XXX模塊

    解決pyinstaller打包exe可執(zhí)行文件后運(yùn)行找不到pandas或者XXX模塊

    這篇文章主要介紹了解決pyinstaller打包exe可執(zhí)行文件后運(yùn)行找不到pandas或者XXX模塊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Django 解決新建表刪除后無(wú)法重新創(chuàng)建等問(wèn)題

    Django 解決新建表刪除后無(wú)法重新創(chuàng)建等問(wèn)題

    這篇文章主要介紹了Django 解決新建表刪除后無(wú)法重新創(chuàng)建等問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • 解決Python保存文件名太長(zhǎng)OSError: [Errno 36] File name too lon

    解決Python保存文件名太長(zhǎng)OSError: [Errno 36] File 

    這篇文章主要介紹了解決Python保存文件名太長(zhǎng)OSError: [Errno 36] File name too lon問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python實(shí)現(xiàn)數(shù)據(jù)圖表

    python實(shí)現(xiàn)數(shù)據(jù)圖表

    plotly是現(xiàn)代平臺(tái)的敏捷商業(yè)智能和數(shù)據(jù)科學(xué)庫(kù),它作為一款開(kāi)源的繪圖庫(kù),可以應(yīng)用于Python、R、MATLAB、Excel、JavaScript和jupyter等多種語(yǔ)言,主要使用的js進(jìn)行圖形繪制,實(shí)現(xiàn)過(guò)程中主要就是調(diào)用plotly的函數(shù)接口,底層實(shí)現(xiàn)完全被隱藏,便于初學(xué)者的掌握。
    2017-07-07
  • python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程

    python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程

    APScheduler的全稱(chēng)是Advanced?Python?Scheduler,它是一個(gè)輕量級(jí)的?Python定時(shí)任務(wù)調(diào)度框架,下面這篇文章主要給大家介紹了關(guān)于python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程,需要的朋友可以參考下
    2022-02-02
  • Python實(shí)現(xiàn)獲取當(dāng)前日期的所屬信息

    Python實(shí)現(xiàn)獲取當(dāng)前日期的所屬信息

    在Python中,處理日期和時(shí)間是一個(gè)常見(jiàn)的任務(wù),它涉及到許多方面,例如獲取日期的年、月、日、星期幾等等,本文將詳細(xì)介紹如何使用Python來(lái)獲取當(dāng)前日期的各種相關(guān)信息,需要的可以了解下
    2024-01-01

最新評(píng)論