日志属性asctime生成本地时间

时间:2013-01-09 00:00:54

标签: python logging

我正在为我的项目使用日志记录,格式为

'format': '%(asctime)s %(message)s'
然而,时间并不等于我当地的时间。 e.g

2013-01-08 11:04:07,383消息 (这是UTC-6时间)

我想知道

  1. 如何使用当地时间登录
  2. 如何将时间格式更改为2013-01-08 11:04:07

  3. 我已修复它,问题是我需要在setting.py中设置时区!!!

1 个答案:

答案 0 :(得分:8)

来自the docs

  

class logging.Formatter(fmt = None,datefmt = None)

     

返回Formatter类的新实例。实例初始化为整个消息的格式字符串,以及消息的日期/时间部分的格式字符串。如果未指定fmt,则使用'%(message)s'。如果未指定datefmt,则使用ISO8601日期格式。

此外:

  

如果格式字符串包含'(asctime)',则会调用formatTime()来格式化事件时间。

因此,您可以指定datefmt,也可以使用自己的Formatter覆盖创建自定义formatTime子类。

而且,如果你想在当地时间和GMT时间(或其他任何东西)之间做出选择:

  

默认使用time.localtime();要为特定格式化程序实例更改此值,请将converter属性设置为与time.localtime()或time.gmtime()具有相同签名的函数。要为所有格式化程序更改它,例如,如果您希望所有记录时间都以GMT显示,请在Formatter类中设置converter属性。

如果您没有使用明确的formatdatefmtFormatter参数也可以传递给basicConfig。您无法以这种方式设置converter - 但您不必这样做,因为默认值是本地时间。

所以:

logging.basicConfig(format='%(asctime)s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S')
log = logging.getLogger(__name__)
log.error('Out of cheese!')

我是在当地时间16:11:30运行的,输出结果为:

2013-01-08 16:11:30 Out of cheese!

事实上,看起来你要做的就是将标准时间格式的毫秒时间缩短,你可以通过截断字符串来做更简单的事情:

logging.basicConfig(format='%(asctime)-.19s %(message)s')

但是,我认为明确指定日期格式更有意义。