4

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

'格式': '%(asctime)s %(message)s'

但是,时间不等于我的当地时间。例如

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

我想知道

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

我已经修好了,问题是我需要在setting.py中设置时区!!!

4

1 回答 1

8

文档

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

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

还:

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

因此,您可以指定一个,或使用您自己的覆盖datefmt创建一个自定义子类。FormatterformatTime

而且,如果您想在当地时间和 GMT 时间(或其他任何时间)之间进行选择:

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

formatanddatefmt参数也可以传递给,basicConfig如果您不使用显式Formatter. 你不能这样设置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')

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

于 2013-01-09T00:05:50.520 回答