2010-03-31 21 views
9

我想在我的請求處理程序的日誌消息中默認記錄模塊和類名。如何更改Python應用程序引擎中日誌消息的默認格式?

通常的做法似乎是通過調用logging.basicConfig來設置自定義格式字符串,但這隻能調用一次,並且在我的代碼運行時已經調用過。

另一種方法是創建一個新的日誌Handler,它可以傳遞一個新的日誌Formatter,但這看起來不正確,因爲我想使用App Engine已安裝的現有日誌處理程序。

什麼是正確的方式有額外的信息添加到所有日誌消息在Python App Engine中,但否則使用現有的日誌格式和接收器?

回答

12

我通過閱讀logging模塊的__init__.py來烹飪。我不知道這是正確的,但它似乎工作:

import logging 

logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
        datefmt='%m-%d %H:%M', 
        ) 

logging.info('Danger Will Robinson!') 
# 03-31 20:00 root   INFO  Danger Will Robinson! 
root = logging.getLogger() 
hdlr = root.handlers[0] 
fmt = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
hdlr.setFormatter(fmt) 
logging.info('Danger Will Robinson!') 
# root  : INFO  Danger Will Robinson! 
+0

我注意到,那'root.handlers [0]'不工作,如果'basicConfig()'是不是之前調用。這是爲什麼? – 2015-12-01 11:51:37

+1

'logging.basicConfig'是一個設置根處理程序的便捷函數。如果你沒有定義一個處理程序,那麼'root.handlers'是一個空列表。因此試圖訪問空列表的第一個元素,例如'root.handlers [0]'引發了一個'IndexError'。無論何時使用'logging'模塊,您必須調用'logging.basicConfig'或從文件中讀取配置文件(例如'logging.config.fileConfig')或[自己設置處理程序(http:// stackoverflow.com/a/4139462/190597)。 – unutbu 2015-12-01 11:55:42

相關問題