python能否在日志中去除INFO:root

36 投票
5 回答
24716 浏览
提问于 2025-04-17 07:31

我在使用Python的日志记录框架,都是用默认设置。因为一些数据对比的原因,我需要把日志和其他数据输出进行比较。不过,Python的日志开头总是会有一些默认的内容,比如:

INFO:root:post params in transmitter

我能不能把Python的日志输出设置成没有INFO:root:这样的内容,像这样:

post params in transmitter

只显示我自己的日志内容呢?

非常感谢!

5 个回答

5

这段代码的意思是……

首先,它定义了一个变量,这个变量就像一个盒子,用来存放一些信息。接下来,它可能会进行一些操作,比如计算、比较或者改变这个变量里的内容。

然后,代码可能会有一些条件判断,类似于生活中的选择,比如“如果下雨我就带伞,否则我就不带”。这部分代码会根据不同的情况执行不同的操作。

最后,代码可能会输出一些结果,像是把计算的结果显示在屏幕上,或者把信息保存到文件里。

总之,这段代码通过一系列的步骤,完成了某个特定的任务。希望这样的解释能让你更容易理解这段代码的作用!

endDate = '2015-07-24'
logging.basicConfig(filename="win" + strftime("%Y%m%d", localtime()) + ".txt", level=logging.DEBUG,format='%(message)s')
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适用于简单的日志记录器。如果你有多个输出流和多种格式,听说这个方法就不太管用了,你需要使用自定义的处理器。

52

没问题。你可以把格式设置成你喜欢的样子:

format: '%(message)s'

像这样:

logging.basicConfig(format='%(message)s', ...)

想了解更多信息,可以查看文档:http://docs.python.org/library/logging.config.html

撰写回答