2013-05-26 60 views
16

我試圖破譯我的日誌中包含的信息(日誌記錄設置使用默認格式化程序)。 documentation指出:什麼是默認的Python日誌格式化程序

格式化記錄 - 如果設置了格式化程序,則使用它。否則,請使用該模塊的默認格式化程序。

但是,我找不到任何實際說明這種默認格式的參考。

感謝

+0

它看起來好像文檔應該指出的那樣。 –

回答

24

默認格式位於here是:

BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s" 

Format代碼會告訴你如何定義它。這裏有一個關於如何定製它的例子。

import logging 
logging.basicConfig(
    level=logging.DEBUG, 
    format="[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s", 
    datefmt="%H:%M:%S", stream=sys.stdout) 
logging.info("HEY") 

導致:

[26/May/2013 06:41:40] INFO [root.<module>:1] HEY 
+0

您如何知道日誌記錄的BASIC_FORMAT屬性?在文檔中沒有提到 – iMath

+1

'log'在你的例子中是未定義的。可能應該稱爲「日誌記錄」。 – Ztyx

1

這是在logging/__init__.py來源:

_defaultFormatter = Formatter() 

的默認格式字符串爲%(message)s,這是在源和:

if fmt: 
    self._fmt = fmt 
else: 
    self._fmt = "%(message)s" 
1

默認似乎是%(levelname)s:%(name)s:%(message)s

import logging 
logging.error("Some error") 
print "fmt: " , logging.root.handlers[0].formatter._fmt 
# ERROR:root:Some error 
# fmt: %(levelname)s:%(name)s:%(message)s 
+0

顯示如何檢查當前格式化程序而不是源代碼中的默認值是IMO更好的答案。 – jjj

0
import logging 
print(logging.BASIC_FORMAT) 

舊線,但是這首出現在查詢「蟒蛇日誌的默認格式爲」我的谷歌的搜索結果,所以我想我應該加我回答。

還有人問到如何自己發現這個問題。這裏是做一個自然的事情:

import logging 
print(dir(logging)) 

BASIC_FORMAT就在那裏,其實這是在我的情況下,在結果中的第一項。