在 Python 中记录到标准输出 stdout
本教程将介绍在 Python 中将日志写入文件和 stdout 的方法。
使用 Python 中的 logging.basicConfig()
函数登录到 stdout
如果我们想将日志打印到控制台窗口并将日志写入文件中,我们可以使用 logging.basicConfig()
函数 来完成此过程。logging.basicConfig()
函数为 Python 中的日志记录配置一些基本参数。我们可以使用此函数的 stream
参数来指定我们也希望在控制台窗口上打印此日志。其余配置与使用 logging.basicConfig()
函数将日志写入文件相同。以下代码演示了我们如何将日志写入控制台窗口。
import logging
import sys
#Creating and Configuring Logger
Log_Format = "%(levelname)s %(asctime)s - %(message)s"
logging.basicConfig(filename = "logfile.log",
stream = sys.stdout,
filemode = "w",
format = Log_Format,
level = logging.ERROR)
logger = logging.getLogger()
#Testing our Logger
logger.error("Our First Error Message")
输出:
2021-06-13 05:15:24,093 - root - ERROR - Our First Error Message
使用 Python 中的 logging.StreamHandler()
函数登录到 stdout
我们还可以使用 logging.StreamHandler()
函数将日志写入 Python 中的控制台窗口。通过将 sys.stdout
传递给 logging.StreamHandler()
函数,我们可以创建一个可以将日志消息打印到控制台窗口的流处理程序。然后我们可以使用 addHandler()
函数将此流处理程序添加到我们的记录器对象。以下代码片段向我们展示了如何使用 logging.StreamHandler()
函数将日志消息打印到控制台窗口。
import logging
import sys
logger = logging.getLogger()
fileHandler = logging.FileHandler("logfile.log")
streamHandler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
streamHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
logger.addHandler(streamHandler)
logger.addHandler(fileHandler)
logger.error("This is the first error")
输出:
2021-06-13 05:03:37,510 - root - ERROR - This is the first error
我们在上面的代码中使用 logging.FileHandler()
和 logging.StreamHandler()
函数将日志消息 This is the first error
写入文件 logfile.log
和控制台窗口。我们首先创建了一个 logger 对象,我们将使用该对象通过 logging.getLogger()
函数编写日志。然后,我们创建了一个文件处理程序 fileHandler
并为其分配了 logging.FileHandler('logfile.log')
。
之后,我们创建了一个流处理程序 streamHandler
,并分配了 logging.StreamHandler(sys.stdout)
。之后,我们创建了一个格式化程序来使用 logging.Formatter()
函数格式化我们的输出,并使用 setFormatter()
函数为 fileHandler
和 streamHandler
设置格式化程序。在上一步之后,我们使用 addHandler()
函数将两个新的处理程序添加到我们的记录器对象中。最后,我们使用 logger.error('This is the first error')
将错误消息写入我们的文件和控制台窗口。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn