2014-10-26 64 views
0

使用logging來使用它自己的「時間」在模擬框架內處理跨多個模塊的日誌記錄。將自定義函數輸出添加到Python日誌記錄處理程序

基本上,我得到的東西:

WARNING:Node[n0].App:RoutingTest:No Packet Count List set up yet; fudging it with an broadcast first 
INFO:Node[n0].Layercake.ALOHA:Transmit to Any 
INFO:Node[n0].Layercake.ALOHA:The timeout is 16.0910738255 
WARNING:Node[n1].App:RoutingTest:No Packet Count List set up yet; fudging it with an broadcast first 
INFO:Node[n1].Layercake.ALOHA:Transmit to Any 

雖然這些在「真實」時有發生或多或少瞬間這很難說是什麼機器時間意味着。

在框架中,有一個全局可訪問的Sim.now(),它返回當前運行時間。

雖然我可以通過所有日誌記錄使用並將其添加爲額外的尾部字段,但我寧願將其添加爲基本logging處理程序的一部分,但是需要掃描相關文檔並在此處搜索並搜索google haven' t出現了任何直接相關的東西。有一個人問幾乎the same question但沒有得到相應的響應

從本質上說,我想起來日期基本處理程序前綴的所有日誌,這個函數的調用調用,有效

logline="[{T}]:{msg}".format(T=Sim.now(), msg=logmsg) 

任何指針?

回答

1

你可以寫一個自定義的Formatter

import logging 
from sim import Sim 

class SimNowPrefixFormatter(logging.Formatter): 
    def format(self, record): 
     log_message = super(SimNowPrefixFormatter, self).format(record) 
     return "[{}]:{}".format(Sim.now(), log_message) 

# Your base logging handler 
handler = logging.StreamHandler() 
handler.setFormatter(SimNowPrefixFormatter("%(levelname)s:%(message)s")) 
root_logger = logging.getLogger() 
root_logger.addHandler(handler) 
相關問題