2014-10-26 151 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) 
相关问题