用tzoff记录时间戳

2024-10-01 04:47:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python日志记录模块来记录消息。我需要的是在日志文件中使用以下类型的日期格式化程序。我怎么能做到呢?在

2016-11-29T06:12:59.519908+05:00

Year-Month-DateTHour:Min:Sec.microsec+timezone

目前我正在使用这个

^{pr2}$

产生以下结果:

2017-01-23T01:50:23.000606

我无法添加时区信息。在


Tags: 模块文件程序信息消息类型记录sec
1条回答
网友
1楼 · 发布于 2024-10-01 04:47:22

这里的问题是处理毫秒,因为在指定格式时处理方式不同。在

我们需要子类logging.Formatter来覆盖formatTime方法并从记录.msecs与original ^{}函数一样

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!')

此代码输出:

^{pr2}$

更新

另一个问题是日志记录不使用datetime,而是使用没有时区的time_struct,因此在上面更新的代码中,我将对象从time_struct转换为datetime(可能会降低性能)。在

应从外部提供时区,因为日志记录不包含时区。在

相关问题 更多 >