带有{}样式的python logging msecs格式

时间:2018-01-30 09:16:12

标签: python logging format-specifiers

对于Python 3.6的日志记录:

使用{msecs}时,我希望style="{"能够使用格式字符串。 我只想要3位数的msecs。 但是,以下所有尝试都失败了:
{msecs:3.0f}
{msecs:03d} # this is in the official documentation and doesn't work
我在这做错了什么?我的总体印象是format_spec str.format() fmtimport logging rl = logging.getLogger() formatter_stdout = logging.Formatter( fmt='{asctime},{msecs:03d} {message}', style='{', ) ch = logging.StreamHandler() ch.setFormatter(formatter_stdout) rl.addHandler(ch) rl.warning('asdf') 参数中效果不佳

0x800706BA–HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE)

2 个答案:

答案 0 :(得分:1)

您无法将日期/时间的格式定义为fmt参数的一部分。对此有单独的datefmt参数。但是,如果没有定义自定义formatTime()功能,则无法按照16.6.4. Formatter Objects部分中的以下注释使用它来格式化毫秒:

  

在版本3.3中更改:以前,默认的ISO 8601格式是   硬编码如下例所示:2010-09-06 22:38:15,292其中   逗号之前的部分由strptime格式字符串处理   ('%Y-%m-%d %H:%M:%S'),逗号后面的部分是毫秒   值。因为strptime没有格式占位符   毫秒,毫秒值使用另一种格式附加   string,'%s,%03d' - 这两种格式字符串都是   硬编码到这个方法。随着更改,这些字符串被定义   作为可在实例上覆盖的类级属性   需要时的水平。属性的名称是   default_time_format(对于strptime格式字符串)和   default_msec_format(用于附加毫秒值)。

您可以在自定义formatTime()函数中自行格式化毫秒,也可以使用此函数的默认实现,只设置格式化程序对象的default_msec_format属性。

formatter_stdout.default_msec_format = '%s,%03d'

fmt参数中,您使用{asctime}占位符来引用已格式化的日期/时间。

答案 1 :(得分:0)

这有效:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
    if (request.todo == "showPageAction")
    {
        chrome.tabs.query({active:true,currentWindow: true}, function(tabs){
            chrome.pageAction.show(tabs[0].id);
        });
    }
});

不确定为什么要使用浮点数毫秒,但确实如此。