Python能否在不显示“INFO:root”的情况下进行日志输出?

33
我使用默认设置的Python日志框架。 由于某些数据比较的原因,我需要将日志与其他数据输出进行比较。 但Python日志始于默认值,类似于:
INFO:root:post params in transmitter

我能否设置Python日志输出,不带INFO:root:这样的东西,比如:

post params in transmitter

只使用我的日志?

非常感谢!


从:INFO:root:post params in transmitter 到:传输器中的POST参数 - littletiger
5个回答

49

有没有一种简单的方法可以显示没有“levelname”的INFO消息,但是显示WARNING和ERROR消息?这将使正常消息更容易阅读,并且易于搜索错误。 - Eric Duminil

10
那些“INFO:…”或“DEBUG:…”出现的原因是某个处理程序进行了定义。我的猜测是:默认的处理程序仍然存在。
您可以在创建后立即查看logger.handlers来检查它。
logger = logging.getLogger()
logger.handlers = [] # This is the key thing for the question!

# Start defining and assigning your handlers here
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s: %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)

此外,您可以覆盖默认处理程序的格式:
if (len(logger.handlers) > 0): # Check here whatever. Or try/except. You get the idea...
    formatter = logging.Formatter("%(asctime)s: %(levelname)s - %(message)s")
    logger.handlers[0].setFormatter(formatter)

我不是 Python 的专家,所以也许有更好的方法来删除或甚至不创建默认处理程序,但这对我来说效果非常好。

注意:如文档所述,.basicConfig 适用于简单的记录器。 如果您有多个流和多个格式,则不起作用,您需要使用自定义处理程序。


基本配置本身对我来说不够,但取消现有的处理程序起作用。 - Ryan McKay

5
endDate = '2015-07-24'
logging.basicConfig(filename="win" + strftime("%Y%m%d", localtime()) + ".txt", level=logging.DEBUG,format='%(message)s')

2

1
我已经设置了Python格式 FORMAT = "" logging.basicConfig(format=FORMAT) 但仍然有INFO:root。 - littletiger

-1

你真的不需要去除 INFO 这个词...(当你的代码变得更加混乱,你使用的东西不仅仅是 info,还有调试异常等等时,它会真正帮助到你)

如果你想将你的数据与那些数据进行比较,你可以做一些类似跳过前10个字符(INFO:ROOT:)然后随意处理的事情。嗯,就像这样:

f = open("my.log","a+")
lines = f.readlines()
for line in lines:
    if(line[10:] ==  my_output):
           do_whatever_you_feel_like()

是的,这种方法可行。但比较是由其他人完成的,所以他希望我给他一个没有INFO:root的日志。另一种选择是编写更多的代码来删除前10个字符。 - littletiger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接