2012-02-13 37 views
4

我正在爲十幾個Python組件編寫一箇中央logging配置文件,我需要一個特定的記錄器以UNIX時間格式記錄時間(無論是毫秒還是秒,分數都很好)。有沒有辦法通過配置文件來配置Python日誌格式化程序來將時間記錄爲Unix時間戳?

有沒有辦法在配置文件中配置格式化程序,輸出%(asctime)s這樣的?我試圖避免必須在多個獨立的Python腳本中修改Formatter實例,並且後處理日誌文件是不可行的。

相關:Python logging: override log time

回答

5

只需添加

datefmt = %s 

您相應的格式化配置部分或格式化的構造函數調用,例如:

[formatter_generic] 
format = %(asctime)s %(levelname)-5.5s [%(name)s] %(message)s 
datefmt = %s 

又見logging.Formatter構造和strftime(3)

+0

你有沒有真正嘗試過嗎?我知道它看起來應該可以工作,但是當我使用小'%s'時,我得到'ValueError:無效格式字符串'(僅)。 – Irfy 2012-02-13 20:18:43

+0

是的,對我來說非常完美。在這裏看到最小的工作示例:https://gist.github.com/1819970 – abbot 2012-02-13 20:33:07

+0

Bah。 'time.strftime'在Windows上描述失敗,我可以在Linux上確認您的解決方案。顯然,Python的strftime [文檔](http://docs.python.org/library/time.html#time.strftime)沒有'%s',所以它實際上是一個無證的特定於平臺的功能... – Irfy 2012-02-13 22:54:35

0

我剛剛發現了以下解決方案:

import logging 

class UnixTimeStampFormatter(logging.Formatter): 
    def formatTime(self, record, datefmt = None): 
     return "{0:.6f}".format(record.created) 

def main(): 
    logChannel = logging.StreamHandler() 
    logChannel.setFormatter(UnixTimeStampFormatter("%(asctime)s %(levelname)-5.5s [%(name)s] %(message)s")) 
    logging.getLogger().setLevel(logging.DEBUG) 
    logging.getLogger().addHandler(logChannel) 
    logging.debug('hello'); 

if __name__ == "__main__": 
    main() 
+0

我試圖避免這樣做,因爲我有許多獨立的,無代碼共享的腳本,需要以所問的方式記錄時間。 – Irfy 2013-05-24 10:34:44

相關問題