簡體   English   中英

如何在 loguru 中格式化經過時間(timedelta)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM