2014-01-16 14 views
2

在我的代碼,我每寫LogRecord字典對象。其中一個密鑰稱爲my_msg,我想創建一個StreamHandler,只是打印出時間和my_msg鍵的值。 我曾嘗試以下,但我得到一個錯誤信息:AttributeError: type object 'LogRecord' has no attribute 'levelname'如何指定一個日誌Handler內str.format()的風格?

streamformatter = logging.Formatter(fmt='{}:\t{}'.format(logging.LogRecord.levelname, logging.LogRecord.message.get('my_msg'), datefmt='%H:%M:%S', style='{') 

回答

3

你需要傳遞只是模板Formatter()類。然後模板會在以後使用格式化你的消息。你還需要使用一個名爲插槽:

streamformatter = logging.Formatter(fmt='{levelname}:\t{my_msg}', datefmt='%H:%M:%S', style='{') 

創建Formatter()對象時,你不調用它.format();在那一刻尚無日誌消息並沒有水平在充滿

logrecord attributes section什麼名字默認情況下可用。在表的第二列中任何%樣式的格式應轉換爲新的樣式格式代替:

  • %(asctime)s成爲{asctime}{asctime!s}
  • %(created)f成爲{created:f}
  • %(lineno)d變得{lineno:d}

+0

感謝擡起頭。在這些小白天,我經常發生這種情況,即在需要之前我會打電話給你。這個問題雖然有兩方面的問題。問題的第二部分是關於如何訪問字典中的每個記錄是實例的密鑰的值? –

+0

你需要在那裏更加明確;你是否使用額外的屬性創建自定義的'LogRecord'實例?如果是這樣,使用上面的語法('my_msg'就是這樣一個屬性)。你是在傳遞參數給'.log()'還是'.info()'或相關的調用?然後,這些被插值到呼叫的第一個參數,你需要在'LogRecord'格式做的是包括'msg'。 –