我正在为我的项目使用日志记录,格式为
'format': '%(asctime)s %(message)s'然而,时间并不等于我当地的时间。 e.g
2013-01-08 11:04:07,383消息 (这是UTC-6时间)
我想知道
我已修复它,问题是我需要在setting.py中设置时区!!!
答案 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属性。
如果您没有使用明确的format
,datefmt
和Formatter
参数也可以传递给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')
但是,我认为明确指定日期格式更有意义。