Python documentation讲授以下语法:
import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')
我想使用python str.format表示format='%(asctime)s %(message)s'
。我该怎么办?
我尝试过但已返回NameError
,这表明我不理解如何定义asctime
和message
。谢谢。
File "~/test.py", line 163, in main
format='{}{}'.format(asctime,message),
NameError: name 'asctime' is not defined
答案 0 :(得分:2)
它看起来像这样:
import logging
logging.basicConfig(level=logging.INFO, format="{asctime} {message}", style='{')
logging.info('hello world')
基本上,上面的.format
与%
样式插值字符串类似,'{asctime} {message}'
。然后,唯一要做的就是告诉记录器使用"{"
样式格式字符串而不是"%"
样式字符串。
请注意,在您的各个日志消息中使用.format
样式字符串并非易事-例如以下内容不起作用:
logging.info("hello {}", "world")
Using particular formatting styles throughout your application中对此进行了详细描述(以及变通方法)。
要点是,您可以将任何对象传递给logging.info
- python会在其上调用str
:
class LogStr:
def __init__(self, msg, *args, **kwargs):
self.msg = msg
self.args = args
self.kwargs = kwargs
def __str__(self):
return self.msg.format(*args, **kwargs)
logging.info(LogStr("Hello {}", "world"))
或者,您可以遍历定义LogRecord
接口兼容对象(也许通过子类)并通过logger.setLogRecordFactory(MyLogRecord)
向记录器注册的恶作剧。