[英]How to format elapsed time (timedelta) in loguru?
loguru 中的經過時間是一個datetime.timedelta對象。 ( loguru 文檔)
我希望將時間格式化為分鍾和秒。 因此,如果elapsed.seconds = 123
,它將變為2m3s
。
這通常可以通過 f-string 中的{elapsed.seconds//60}m{elapsed.seconds%60}s
或使用.format()
來實現。
但是如果我在 loguru 的格式參數字符串中使用 f-string,它顯然無法識別變量elapsed.seconds
因為它屬於 loguru 而不是當前范圍。 所以它給出了錯誤AttributeError: 'datetime.timedelta' object has no attribute 'seconds//60'
in case of f-strings and NameError: name 'elapsed' is not defined
in case of the case of try to use .format()
Here's要復制的代碼-
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 字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.