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,这是要复制的代码-
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,它可以打印的日志如下:
07-Jul-2022 18:20:19|DEBUG | (123s) Printing int这是我要打印的日志:
07-Jul-2022 18:20:19|DEBUG | (2m3s) Printing int发布于 2022-07-07 13:36:12
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-字符串。
https://stackoverflow.com/questions/72898473
复制相似问题