最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

該怎么辦呢?

有以下幾種辦法

修改初始化日志時的級別

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

但是這種方法需要我將之前記錄日志的 debug 方法也要修改為比info更高的級別,也就是要大于20。修改的地方有點多,且我已經(jīng)習(xí)慣了用 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的實現(xiàn),想想都復(fù)雜,而且直接修改site-packes里的庫文件是一個比較笨的方法,日后遷移會發(fā)生很多莫名其妙的問題。

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

其實logging早就有了相應(yīng)的解決方法,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]

總結(jié)

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

相關(guān)文章

  • Python GUI編程學(xué)習(xí)筆記之tkinter界面布局顯示詳解

    Python GUI編程學(xué)習(xí)筆記之tkinter界面布局顯示詳解

    這篇文章主要介紹了Python GUI編程學(xué)習(xí)筆記之tkinter界面布局顯示,結(jié)合實例形式分析了Python GUI編程中tkinter界面布局顯示的相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2020-03-03
  • Pycharm社區(qū)版創(chuàng)建Flask項目的實現(xiàn)步驟

    Pycharm社區(qū)版創(chuàng)建Flask項目的實現(xiàn)步驟

    本文主要介紹了Pycharm社區(qū)版創(chuàng)建Flask項目,包括設(shè)置Python環(huán)境、安裝Flask庫以及創(chuàng)建基本的項目結(jié)構(gòu),具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 使用Python開發(fā)在線編輯器

    使用Python開發(fā)在線編輯器

    這篇文章主要為大家詳細介紹了如何使用Python開發(fā)一個在線編輯器,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解一下
    2025-02-02
  • pandas庫中?DataFrame的用法小結(jié)

    pandas庫中?DataFrame的用法小結(jié)

    這篇文章主要介紹了pandas庫中?DataFrame的用法,利用pandas.DataFrame可以構(gòu)建表格,通過列標屬性調(diào)用列對象,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Python實現(xiàn)新年愿望代碼雨效果

    Python實現(xiàn)新年愿望代碼雨效果

    新的一年又要來了,這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)新年愿望代碼雨的動畫效果。文中的示例代碼講解詳細,感興趣的可以動手嘗試一下
    2023-01-01
  • python實現(xiàn)單例的兩種方法解讀

    python實現(xiàn)單例的兩種方法解讀

    這篇文章主要介紹了python實現(xiàn)單例的兩種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python小白學(xué)習(xí)爬蟲常用請求報頭

    Python小白學(xué)習(xí)爬蟲常用請求報頭

    在本篇文章里小編給大家整理了關(guān)于Python小白學(xué)習(xí)爬蟲常用請求報頭的相關(guān)知識點,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python?Web開發(fā)通信協(xié)議WSGI?uWSGI?uwsgi使用對比全面介紹

    Python?Web開發(fā)通信協(xié)議WSGI?uWSGI?uwsgi使用對比全面介紹

    這篇文章主要為大家介紹了Python?Web開發(fā)通信協(xié)議WSGI?uWSGI?uwsgi使用對比全面介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Python+Turtle實現(xiàn)繪制勾股樹

    Python+Turtle實現(xiàn)繪制勾股樹

    畢達哥拉斯樹,也叫“勾股樹”,是由畢達哥拉斯根據(jù)勾股定理所畫出來的一個可以無限重復(fù)的樹形圖形。本文將利用Python中的Turtle庫實現(xiàn)勾股樹的繪制,感興趣的可以了解一下
    2023-01-01
  • pandas 實現(xiàn)字典轉(zhuǎn)換成DataFrame的方法

    pandas 實現(xiàn)字典轉(zhuǎn)換成DataFrame的方法

    今天小編就為大家分享一篇pandas 實現(xiàn)字典轉(zhuǎn)換成DataFrame的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

鹤壁市| 隆尧县| 科尔| 芮城县| 伊吾县| 丹棱县| 锡林浩特市| 张家界市| 芦溪县| 云龙县| 定兴县| 弋阳县| 马关县| 金秀| 灵山县| 富裕县| 祁阳县| 靖远县| 枣庄市| 吴忠市| 义马市| 花垣县| 新龙县| 田东县| 岑巩县| 山东| 阳泉市| 尚志市| 桦川县| 衡水市| 琼结县| 稻城县| 内黄县| 池州市| 巩义市| 兴仁县| 辽中县| 英吉沙县| 拉萨市| 仁化县| 涞源县|