亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用Filter過濾python中的日志輸出的實現方法

系統 1552 0

事情是這樣的,我寫了一個tornado的服務,過程當中我用logging記錄一些內容,由于一開始并沒有仔細觀察tornado自已的日志管理,所以我就一般用debug來記錄普通日志,error記錄有問題的日志,但是當服務跑起來以后才發現,tornado的訪問日志的級別是info,也就是20,debug是10的,所以如果我定義了日志的級別是debug,那么默認情況下肯定也會輸出到日志文件中的。

但是我現在并不關心訪問日志,而且由于我這個服務可能每時每刻都會有訪問,這樣在我對日志信息進行搜索的時候就會有很大的影響。

該怎么辦呢?

有以下幾種辦法

修改初始化日志時的級別

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

但是這種方法需要我將之前記錄日志的?debug 方法也要修改為比info更高的級別,也就是要大于20。修改的地方有點多,且我已經習慣了用?debug 來記錄,改起來成本有點大。

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

使用logging.Filter設置過濾規則

其實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用法

            
#第一個參數是一個返回bool值的一般函數或lambda函數,第二個參數是一個可迭代對象
#最后返回一個可迭代對象,可以通過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

            
              
[1, 3]
[1, -2, 3, -4]
b = list(filter(lambda item:item>0,values))
print(b)
 #output 
[1,3]
            
          

總結

以上所述是小編給大家介紹的使用Filter過濾python中的日志輸出,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91精品一区二区 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 蝌蚪久久| 这里只有精品国产 | 一本大道高清香蕉中文大在线 | 国产一级高清视频 | 国产精品v免费视频 | 国产四虎免费精品视频 | 91热在线观看精品 | 欧美色视频超清在线观看 | 精品免费久久久久久成人影院 | 欧美日韩国产高清一区二区三区 | 亚洲图片另类图片 | 九九国产精品 | 日韩毛片大全 | 伊人爱爱网| 国内精品久久久久久影院网站小说 | 亚洲视频在线免费看 | 日韩高清成人 | 91网红福利精品区一区二 | 天天综合射| 成人美女隐私免费 | 免费一级黄色录像 | 纯欧美一级毛片_免费 | 色噜噜狠狠一区二区三区 | 日本人69视频页码jlzz | 亚洲精品高清国产麻豆专区 | 久久我们这里只有精品国产4 | 4hu四虎永久免在线视看 | 亚洲综合图 | 色偷偷免费视频 | 久久香蕉国产线看观看亚洲片 | 老司机午夜精品视频在线观看免费 | 日日噜噜噜夜夜爽爽狠狠 | 九九视频免费观看 | 三级不卡 | 国产精品第一 | 奇米影视亚洲狠狠色 | japanese乱子另类 | 99精品视频在线观看免费播放 | 亚洲日本视频在线 |