在Python的文档之后 ,我试图覆盖logging.Formatter.converter以控制记录的时间。 如下所示 - 毫秒未被覆盖 (它们是当前时间毫秒)。
怎么来的? 我怎样才能控制毫秒?
>>> import logging, datetime >>> formatter = logging.Formatter('%(asctime)s:%(message)s') >>> handler = logging.StreamHandler() >>> handler.setFormatter(formatter) >>> def sim_time(t): ... return datetime.datetime(2000,1,2,3,4,5,678).timetuple() ... >>> formatter.converter = sim_time >>> log = logging.getLogger('test') >>> log.addHandler(handler) >>> log.info('hi') 2000-01-02 03:04:05,898:hi >>> log.info('hi') 2000-01-02 03:04:05,914:hi >>> log.info('hi') 2000-01-02 03:04:05,434:hiFollowing Python's documentation, I'm trying to override logging.Formatter.converter in order to control the time logged.As you can see below - the milliseconds were not overriden (they are the current time milliseconds).
How come? How can I control the milliseconds as well?
>>> import logging, datetime >>> formatter = logging.Formatter('%(asctime)s:%(message)s') >>> handler = logging.StreamHandler() >>> handler.setFormatter(formatter) >>> def sim_time(t): ... return datetime.datetime(2000,1,2,3,4,5,678).timetuple() ... >>> formatter.converter = sim_time >>> log = logging.getLogger('test') >>> log.addHandler(handler) >>> log.info('hi') 2000-01-02 03:04:05,898:hi >>> log.info('hi') 2000-01-02 03:04:05,914:hi >>> log.info('hi') 2000-01-02 03:04:05,434:hi最满意答案
覆盖logging.Formatter.formatTime()而不是:
def sim_time(record, datefmt=None): return datetime.datetime(2000,1,2,3,4,5,678).strftime('%Y-%m-%d %H:%M:%S,%f')[:-3] formatter.formatTime = sim_time如果在此过程中需要所有记录器,则可以覆盖类函数本身,但在代码遇到第一个import logging语句后立即执行此操作:
def sim_time(self, record, datefmt=None): return datetime.datetime(2000,1,2,3,4,5,678).strftime('%Y-%m-%d %H:%M:%S,%f')[:-3] import logging logging.Formatter.formatTime = sim_timeoverride logging.Formatter.formatTime() instead with this:
def sim_time(record, datefmt=None): return datetime.datetime(2000,1,2,3,4,5,678).strftime('%Y-%m-%d %H:%M:%S,%f')[:-3] formatter.formatTime = sim_timeIf you need it for all loggers in this process, you can override the class function itself, but do this right after the first import logging statement your code encounters:
def sim_time(self, record, datefmt=None): return datetime.datetime(2000,1,2,3,4,5,678).strftime('%Y-%m-%d %H:%M:%S,%f')[:-3] import logging logging.Formatter.formatTime = sim_time更多推荐
发布评论