python中的logging

來源:互聯網
上載者:User

標籤:python logging

python logging模組可能會令人困惑的地方 通過參閱python logging模組的代碼,發現一些有趣的現象:

 

1. logging對象其實是一個樹形結構,每個建立的logging對象都是root logging對象的孩子結點。當使用logging模組的getLogger(name=None)函數構造logging對象的時候,如果name為None,這樣會產生一個root logging對象。如果name中含有.,比如name = ‘a.b.c‘,通過這種方式會產生3個logging對象,分別為c、b、a,c->b->a->root,root樹的根結點,a為root的孩子結點,b為a的孩子結點,c為a的孩子結點,依次類推。

 

2. root結點是全域的,雖然這過程中涉及到多個模組,但是它們會共用一個root結點。

 

3. 每個logging對象打LOG的時候,也會把LOG資訊傳遞到傳遞到上層logging對象中,對於c->b->a->root這種情況,這個LOG其實會打4次,以c、b、a、root循序依次打一個LOG。

 

可能有人會問,像我之前一般用A模組或者B模組那樣的方式去初始化一個logging對象,這樣初始化的對象也會是root logging對象的一個孩子,而root logging對象通常會把LOG打到螢幕上,那按理說,正常情況下打LOG都會打兩份,一份會打到檔案中,一份會打到螢幕中。那為什麼實際情況是,只有LOG檔案中有對應的LOG,但是螢幕中並沒有對象的顯示呢?

 

其實,如果對這個過程有些好奇,對直接很習以為常的方式有些懷疑,而且抱著這樣的好奇心去探索,相信肯定會有更多的收穫。

 

 

所以,比較困惑的是,為什麼我調用A模組產生的sLogger.info打出的LOG,只有LOG檔案中有,而root logging為什麼不打LOG打到螢幕上。為什麼root logging不起作用。這個時候,可以看下logging __init__.py的代碼,會發現,root logging info的代碼如下:

 

 

def info(msg, *args, **kwargs):

    """

    Log a message with severity ‘INFO‘ on the root logger.

    """

    if len(root.handlers) == 0:

        basicConfig()

    root.info(msg, *args, **kwargs)

 

 上面的代碼中涉及到root.handlers,懷疑root.handlers跟打LOG的方式有關。因此,print len(root.handlers),發現結果為0。也就是說,預設的root logging對應的handlers為[],這樣導致的結果是sLogger打LOG的時候,root logging並不會打任何LOG。



Python中的logging模組

記錄異常資訊

當你使用logging模組記錄異常資訊時,不需要傳入該異常對象,只要你直接調用logger.error() 或者 logger.exception()就可以將當前異常記錄下來。

# 記錄異常資訊try:    1 / 0except:    # 等同於error層級,但是會額外記錄當前拋出的異常堆棧資訊    logger.exception(‘this is an exception message‘)# 2016-10-08 21:59:19,493 ERROR   : this is an exception message# Traceback (most recent call last):#   File "D:/Git/py_labs/demo/use_logging.py", line 45, in <module>#     1 / 0# ZeroDivisionError: integer division or modulo by zero


python中的logging

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.