我打算使用日志记录模块来监控每个脚本执行(事件)的已用时间。 我用了这段代码:
import logging
import time
logging.basicConfig(filename='example.log', filemode='w', format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p', level=logging.INFO)
logging.info('Start:')
time.sleep(5)
logging.info('Complete:')
print("Hello World!")
在example.log中我有这个:
01/14/2015 09:16:15 PM Start:
01/14/2015 09:16:20 PM Complete:
我的目标:我想计算经过的时间,即在完成和开始之间,我不能轻易地减去09:16:20 PM - 09:16:15 PM。
我的问题:如何在basicConfig中重新格式化datefmt以便在几秒钟内获得时间。我想通过减去两个值来进行简单的操作,并监视它是否太长。 感谢
答案 0 :(得分:1)
您可以尝试使用此格式调用basicConfig
:
logging.basicConfig(filename='example.log', filemode='w', format='%(created)f %(message)s', level=logging.INFO)
这应生成以下日志条目(您的时间会明显不同):
1421288969.379916 Start:
1421288974.385206 Complete:
我在你的问题中推断,你将在之后解析日志文件以计算持续时间。 %(created)f
生成自纪元以来经过的秒数作为浮点值,所以希望这有助于您的计算。
答案 1 :(得分:1)
Delorean可以帮助您解析和转换为常规 timedate 对象,以便您可以确定增量。
以下代码采用您在日志中的格式并可以计算增量:
from delorean import Delorean
from delorean import parse
st = parse("01/14/2015 09:16:15 PM")
end = parse("01/14/2015 09:16:20 PM")
diff = end.naive() - st.naive()
print diff
输出结果为:
○时00分05秒
st
和end
都是Delorean
个对象,时区 UTC ,例如
>>> print st
Delorean(datetime=2015-01-14 21:16:15+00:00, timezone=UTC)
diff
是datetime.timedelta
个对象,例如
>>> diff = end.naive() - st.naive()
>>> type(diff)
<type 'datetime.timedelta'>
答案 2 :(得分:1)
为了便于阅读,我建议您保留basicConfig
,之后,当您阅读日志时,请通过datetime
解析来提取日期和时间。 E.g:
>>> import datetime
>>> datefmt = '%m/%d/%Y %I:%M:%S %p' # the same you used for logging
>>> logline = '01/14/2015 09:16:15 PM Start:' # as read from the log
>>> datetime.datetime.strptime(' '.join(x.split()[:3]), datefmt)
datetime.datetime(2015, 1, 14, 21, 16, 15)
>>> _.timestamp()
1421298975.0
这些是你自纪元以来的秒数,因此很容易获得日志中连续行的时间戳之间的秒数差异。 (.timestamp()
部分需要Python 3.3或更高版本,但在早期版本中,您可以区分datetime
个对象并在该时差对象上调用total_seconds
方法。