首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在loguru中格式化经过的时间(timedelta)?

如何在loguru中格式化经过的时间(timedelta)?
EN

Stack Overflow用户
提问于 2022-07-07 13:13:23
回答 1查看 272关注 0票数 1

loguru中的运行时间是一个datetime.timedelta对象。(loguru文档)

我希望时间被格式化为分钟和秒。所以,如果是elapsed.seconds = 123,它就会变成2m3s

这通常可以通过{elapsed.seconds//60}m{elapsed.seconds%60}s在f字符串中或使用.format()来实现.

但是,如果我在loguru的格式参数字符串中使用f- string,它显然不会识别变量elapsed.seconds,因为它属于loguru,而不是当前范围。所以它给出了f-字符串情况下的错误AttributeError: 'datetime.timedelta' object has no attribute 'seconds//60',在试图使用.format()的情况下给出了NameError: name 'elapsed' is not defined,这是要复制的代码-

代码语言:javascript
复制
from loguru import logger

logger_format = ('{time:DD-MMM-YYYY HH:mm:ss}'
                  '|{level:<8}| '
                  '({elapsed.seconds}s)')

logger.add('test.log', delay=True, format=logger_format, level='DEBUG')

def print_something(x):
    if type(x) == int:
        print(x)
        logger.debug('Printing int')
        
print_something(2)

如果运行时间为123 s,它可以打印的日志如下:

代码语言:javascript
复制
07-Jul-2022 18:20:19|DEBUG   | (123s) Printing int

这是我要打印的日志:

代码语言:javascript
复制
07-Jul-2022 18:20:19|DEBUG   | (2m3s) Printing int
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-07 13:36:12

format参数可以是格式字符串,但也可以是可调用的,它接受记录字典并返回字符串,如下所示:

代码语言:javascript
复制
from loguru import logger

def my_format(record):
    mins = record['elapsed'].seconds // 60
    secs = record['elapsed'].seconds % 60
    return '|{level:<8}| ({mins}m{secs}s)\n{exception}'.format(**record, mins=mins, secs=secs)

logger.add('test.log', delay=True, format=my_format, level='DEBUG')

如果您愿意,也可以使用f-字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72898473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档