2017-04-26 52 views
0

我正在學習有關Python記錄,但我不明白爲什麼日誌可以初始化像這樣:爲什麼記錄模塊在沒有實例的情況下被訪問?

logging.basicConfig(level=logging.INFO) 

不就需要這樣的東西:

l_instance = logging.basicConfig(level=logging.INFO) 

方式類似, CSV是這樣做的:

c_instance = csv.reader() 
+1

[「Logger有以下屬性和方法。注意,Logger不會直接實例化,但總是通過模塊級函數'logging.getLogger(name) '「](https://docs.python.org/2/library/logging.html) –

+1

另外,請閱讀[PEP](https://www.python.org/dev/peps/pep-0282/)爲理由。 Tl; dr版本:方便。 –

回答

1

讓我們來看看解決這個問題的源代碼。它的作用是暗示添加處理程序,以根:

_acquireLock() 
try: 
    if len(root.handlers) == 0: 
     filename = kwargs.get("filename") 
     if filename: 
      mode = kwargs.get("filemode", 'a') 
      hdlr = FileHandler(filename, mode) 
     else: 
      stream = kwargs.get("stream") 
      hdlr = StreamHandler(stream) 
     fs = kwargs.get("format", BASIC_FORMAT) 
     dfs = kwargs.get("datefmt", None) 
     fmt = Formatter(fs, dfs) 
     hdlr.setFormatter(fmt) 
     root.addHandler(hdlr) 
     level = kwargs.get("level") 
     if level is not None: 
      root.setLevel(level) 
finally: 
    _releaseLock() 

所以一個原因是,該方法返回None:d

現在,看看,如果你調用getLogger方法:

if name: 
    return Logger.manager.getLogger(name) 
else: 
    return root 

你cann看到它返回這個創建的根。同樣的道理也適用於其他方法debug

def debug(msg, *args, **kwargs): 
    """ 
    Log a message with severity 'DEBUG' on the root logger. 
    """ 
    if len(root.handlers) == 0: 
     basicConfig() 
    root.debug(msg, *args, **kwargs) 

看到了嗎?它在root上運行。 Pyton是開源的,你可以使用它;)

相關問題