如何在python中使用Filter過濾日志輸出-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關(guān)如何在python中使用Filter過濾日志輸出,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

從策劃到設(shè)計制作,每一步都追求做到細膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站策劃、網(wǎng)頁設(shè)計、國際域名空間、網(wǎng)頁空間、網(wǎng)絡(luò)營銷、VI設(shè)計、 網(wǎng)站改版、漏洞修補等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進步。

修改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的級別,然后再修改log_request的實現(xiàn),想想都復雜,而且直接修改site-packes里的庫文件是一個比較笨的方法,日后遷移會發(fā)生很多莫名其妙的問題。

使用logging.Filter設(shè)置過濾規(guī)則

其實logging早就有了相應的解決方法,logging庫中有一個Filterer類,logging庫中的Handler和Logger類都是繼承自Filter類的

Filter類中有三個方法, addFilter(filter) , removeFilter(filter) 和 filter(record) 方法,這里主要使用addFilter和filter方法。

addFilter方法需要一個filter對象,這里我定義一個新的類,并且重寫filter方法,

將日志名為 tornado.access 且日志級別是20的過濾掉。

class NoParsingFilter(logging.Filter):
  def filter(self, record):
    if record.name == 'tornado.access' and record.levelno == 20:
      return False
    return True

這樣我在初始化 logging對象以后,將這個過濾器添加進去

logobj = logging.getLogger('server')
logobj.addFilter(NoParsingFilter())

這樣添加一個過濾以后日志就會隨心所欲的按照自已的方式來記錄了,record也是logging的一個類 LogRecord ,常用的屬性有 name, level, pathname, lineno,msg, args, exc_info

name 就是初始化logger對象時傳入的名字

level 是級別

pathname 是哪個文件輸出的這行日志

lineno 是行號

msg 是日志本身

ps:下面看下python中過濾器filter用法

#第一個參數(shù)是一個返回bool值的一般函數(shù)或lambda函數(shù),第二個參數(shù)是一個可迭代對象
#最后返回一個可迭代對象,可以通過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過濾日志輸出就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

新聞名稱:如何在python中使用Filter過濾日志輸出-創(chuàng)新互聯(lián)
文章地址:http://bm7419.com/article14/ihpge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、電子商務(wù)、外貿(mào)建站面包屑導航、搜索引擎優(yōu)化、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化