Python日志记录:覆盖日志时间(Python logging: override log time)

编程入门 行业动态 更新时间:2024-10-25 20:29:04
Python日志记录:覆盖日志时间(Python logging: override log time)

在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:hi

Following 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_time

override 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_time

If 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

更多推荐

本文发布于:2023-08-03 14:14:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1390798.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:日志   时间   Python   logging   time

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!