2013-10-19 32 views
1

Python有兩個主要的字符串格式化選項%str.formatlogging模塊有一個懶惰的功能。爲什麼python日誌記錄模塊使用舊的字符串格式?

logging.debug('The value is %s', huge_arg) 

如果日誌行不打印,則不會構造字符串。但是,此功能只有在sting使用舊式%格式時才起作用。有沒有辦法使用str.format這個懶惰的功能?有可能是一個名爲ARG這樣的:

logging.debug('The value is {}', fmt_arg=(huge_arg)) 

回答

4

你的問題的唯一答案是 - 迄今爲止 - 沒有人主動改變logging代碼來支持新格式的功能。如果你是志願者,爲什麼不在the Python-Dev mailing list上提問?我認爲它比你意識到更棘手(例如,可能是已調用logging函數的函數已經發生了通過fmt_arg關鍵字參數)。祝你好運;-)

1

我有點害怕頂撞TimBot,但我有另一個答案:-)

記錄模塊使用%格式,因爲它預先日期的外觀{} -formatting在Python中(logging出現在2.6中的2.3,str.format)。記錄還沒有轉換過來{} -formatting因爲:

  1. 你不能切換而不破壞了很多的第三方庫和應用程序的現有代碼,那麼%-formatting在這裏停留。
  2. {}格式化到達時,%格式化(AFAIK,它仍然是,雖然它提供了對輸出的更多控制,但它仍然有點慢),並且人們認爲logging是一種開銷,因爲它不需要增加那個開銷;-)
  3. 已經支持{}格式化和甚至$樣式格式(string.Template),如this post from 2010中所述。所描述的方法支持日誌的懶惰格式。
+1

它爲什麼會破壞現有的代碼,如果它只是引入一個額外的關鍵字參數(除非有人使用自定義類)? '{}'緩慢使得懶惰記錄更合適。感謝您的鏈接。 – balki

+0

@balki也許不會,但你永遠無法知道人們對你的代碼做了什麼假設。無論如何,它肯定會使代碼路徑複雜化,併爲功能上的好處添加代碼(因爲您已*可以*已經使用{}格式化日誌記錄,如鏈接到的帖子中所述)。而且人們已經表示,他們希望儘可能降低日誌記錄開銷,即使懶惰格式化從第一天開始就已經存在。 –

相關問題