2013-04-17 37 views
1

我一直在閱讀Python logging文檔,它肯定有很多功能......對於所有內容。將自定義信息添加到日誌中的最佳方法

我面臨的問題是,我不是荷蘭人,所以我不知道什麼是正確的方法來做到這一點。

我在模擬器中運行事件,並且我想在每個日誌消息前加上模擬的時間的時間戳(可能還有一個長度格式化程序,以保持它看起來不錯)。我可以在LoggerHandler的子類中對此進行更改,但我認爲這不是正確的做法。

我認爲正確的方法是使用LoggerAdapterFilter。這是對的嗎?如果是的話,我應該選擇哪一個?

+0

我更新了我的回答以迴應您的評論。 –

回答

2

當然,如果您只需要爲每個日誌消息加上時間戳前綴,那麼您只需爲格式化程序提供適當的格式字符串?如文中提到here

更新: A LoggerAdapter將更適合情境信息是適度長壽的情況。例如,在處理多個客戶端連接的網絡服務器應用程序中,連接細節(例如客戶端IP地址)可能是有用的上下文,所以當創建新的客戶端連接時,您將創建一個LoggerAdapter實例。這聽起來不像你的模擬場景。另一方面,如果可以使用它來獲得模擬時間,例如可以使用另一方面,則可以使用A

A Filter

class SimulationFilter(logging.Filter): 
    def __init__(self, context): 
     """ 
     Set up with context passed in which allows access 
     to simulation times. 
     """ 
     self.context = context 

    def filter(self, record): 
     "Add sim_time field to record, formatted as you wish" 
     record.sim_time = '%s' % self.context.get_sim_time() 
     return True 
Formatter的格式字符串

,然後添加%(sim_time)s

或者,如果您知道模擬時間,無論何時進行日誌記錄調用,您都可以執行

logger.debug('Message with %s', arguments, extra={'sim_time': sim_time}) 
Formatter的格式字符串

,並同樣具有%(sim_time)s

+0

我澄清說,這是我想包括的*模擬*時間。抱歉含糊不清。 –

相關問題