2017-09-07 70 views
0

我有兩個文件,a.pyb.py。當我輸入的方法從b.pya.py,日誌從b.py方法不會在控制檯上顯示記錄器不傳播給子模塊

import logging 
import sys 
logger = logging.getLogger(__name__) 
logger.addHandler(logging.StreamHandler(sys.stdout)) 

現在:

這是寫在這兩個文件。

a.py調用就像b.method_name()

如何在控制檯上顯示來自b.py的日誌?

+0

不相關,但不應該在庫代碼中的記錄器中添加處理程序。日誌包的要點是將日誌記錄器調用(在庫代碼中)與日誌記錄配置(在應用程序的頂層)分開。 –

回答

0

鑑於a.py

import logging 
import sys 
import b 


logger = logging.getLogger(__name__) 
logger.addHandler(logging.StreamHandler(sys.stdout)) 


def bar(): 
    logger.error("bar error") 
    logger.info("bar info") 
    logger.warning("bar warnign") 

bar()  
b.foo() 

b.py

import logging 
import sys 
logger = logging.getLogger(__name__) 
logger.addHandler(logging.StreamHandler(sys.stdout)) 

def foo(): 
    logger.error("foo error") 
    logger.info("foo info") 
    logger.warning("foo warnign") 

我獲得以下的輸出:

bar error 
bar warnign 
foo error 
foo warnign 

不知道你的文件的樣子,但默認情況下,你贏了在某些日誌記錄級別看不到消息(在這種情況下,最低的你會看到的是warning)。

+0

如果我做'print(logger.handlers)' 函數內部顯示空列表,在函數外顯示'b.py'的流處理程序' '[]' –

+0

您是否導入'foo' as'from b import foo'或'from b import *',或者你做'import b'? – Fejs

+0

那麼我的包裝就像 'package.dir.a','package.b',我將b作爲'from package import b'導入到a中,並將該方法用作b.foo() –