loguru 耗时是 datetime.timedelta目的。 (loguru docs)
我希望时间格式为分钟和秒。因此,如果elapsed.seconds = 123
,它将变成2m3s
。
这通常可以通过 f 字符串中的 {elapsed.seconds//60}m{elapsed.seconds%60}s
或使用 .format()
来实现。
但是如果我在 loguru 的格式参数字符串中使用 f-string,它显然无法识别变量 elapsed.seconds
因为它属于 loguru 而不是当前范围。因此,在 f 字符串的情况下,它会给出错误 AttributeError: 'datetime.timedelta' object has no attribute 'seconds//60'
和 NameError: name 'elapsed' is not Define
如果尝试使用 .format()
这是要复制的代码-
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 秒它可以打印的日志:
07-Jul-2022 18:20:19|DEBUG | (123s) Printing int
这是我想要打印的日志:
07-Jul-2022 18:20:19|DEBUG | (2m3s) Printing int
最佳答案
format
参数可以是格式字符串,但也可以是接受记录字典并返回字符串的可调用函数,如下所示:
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 字符串。
关于python - 如何在 loguru 中格式化耗时 (timedelta)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72898473/