2024-10-01 04:47:22 发布
网友
我使用python日志记录模块来记录消息。我需要的是在日志文件中使用以下类型的日期格式化程序。我怎么能做到呢?在
2016-11-29T06:12:59.519908+05:00 Year-Month-DateTHour:Min:Sec.microsec+timezone
目前我正在使用这个
产生以下结果:
2017-01-23T01:50:23.000606
我无法添加时区信息。在
这里的问题是处理毫秒,因为在指定格式时处理方式不同。在
我们需要子类logging.Formatter来覆盖formatTime方法并从记录.msecs与original ^{}函数一样
logging.Formatter
formatTime
import logging import time import pytz from time import mktime from datetime import datetime class DateFormatter(logging.Formatter): DATE_FORMAT = '%Y-%m-%dT%H:%M:%S,%%03d%z' def __init__(self, timezone=None, *args, **kwargs): self._timezone = timezone super(DateFormatter, self).__init__(*args, **kwargs) def formatTime(self, record, datefmt=None): ct = self.converter(record.created) dt = datetime.fromtimestamp(mktime(ct) + record.msecs / 1000., self._timezone) return dt r = logging.getLogger() h = logging.StreamHandler() timezone = pytz.timezone('Asia/Jerusalem') fmt = DateFormatter(timezone, '%(asctime)s - %(name)s - %(levelname)s - %(message)s') h.setFormatter(fmt) r.addHandler(h) r.error('something bad!')
此代码输出:
另一个问题是日志记录不使用datetime,而是使用没有时区的time_struct,因此在上面更新的代码中,我将对象从time_struct转换为datetime(可能会降低性能)。在
datetime
time_struct
应从外部提供时区,因为日志记录不包含时区。在
这里的问题是处理毫秒,因为在指定格式时处理方式不同。在
我们需要子类} 函数一样
logging.Formatter
来覆盖formatTime
方法并从记录.msecs与original ^{此代码输出:
^{pr2}$更新
另一个问题是日志记录不使用
datetime
,而是使用没有时区的time_struct
,因此在上面更新的代码中,我将对象从time_struct
转换为datetime(可能会降低性能)。在应从外部提供时区,因为日志记录不包含时区。在
相关问题 更多 >
编程相关推荐