我正在爲十幾個Python組件編寫一箇中央logging
配置文件,我需要一個特定的記錄器以UNIX時間格式記錄時間(無論是毫秒還是秒,分數都很好)。有沒有辦法通過配置文件來配置Python日誌格式化程序來將時間記錄爲Unix時間戳?
有沒有辦法在配置文件中配置格式化程序,輸出%(asctime)s
這樣的?我試圖避免必須在多個獨立的Python腳本中修改Formatter實例,並且後處理日誌文件是不可行的。
相關:Python logging: override log time
我正在爲十幾個Python組件編寫一箇中央logging
配置文件,我需要一個特定的記錄器以UNIX時間格式記錄時間(無論是毫秒還是秒,分數都很好)。有沒有辦法通過配置文件來配置Python日誌格式化程序來將時間記錄爲Unix時間戳?
有沒有辦法在配置文件中配置格式化程序,輸出%(asctime)s
這樣的?我試圖避免必須在多個獨立的Python腳本中修改Formatter實例,並且後處理日誌文件是不可行的。
相關:Python logging: override log time
只需添加
datefmt = %s
您相應的格式化配置部分或格式化的構造函數調用,例如:
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %s
我剛剛發現了以下解決方案:
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()
我試圖避免這樣做,因爲我有許多獨立的,無代碼共享的腳本,需要以所問的方式記錄時間。 – Irfy 2013-05-24 10:34:44
你有沒有真正嘗試過嗎?我知道它看起來應該可以工作,但是當我使用小'%s'時,我得到'ValueError:無效格式字符串'(僅)。 – Irfy 2012-02-13 20:18:43
是的,對我來說非常完美。在這裏看到最小的工作示例:https://gist.github.com/1819970 – abbot 2012-02-13 20:33:07
Bah。 'time.strftime'在Windows上描述失敗,我可以在Linux上確認您的解決方案。顯然,Python的strftime [文檔](http://docs.python.org/library/time.html#time.strftime)沒有'%s',所以它實際上是一個無證的特定於平臺的功能... – Irfy 2012-02-13 22:54:35