在 Python 中使用 FileHandler 多次打印日志
Logs getting printed multiple time using FileHandler in Python
执行从 Robot Framework 发生,其中 Test.py
已作为库导入,testLog()
正在执行,后者又导入 Logger.py
并调用 LogMessage()
.
Test.py
import Logger
def testLog():
Logger.LogMessage("This is the first line of the log file.")
Logger.LogMessage("This is the second line of the log file.")
Logger.LogMessage("This is the third line of the log file.")
Logger.py
import logging
def LogMessage(message):
LOG_FILENAME = "C://Log_Details".log"
logger = logging.getLogger()
logFileHandler = logging.FileHandler(LOG_FILENAME)
logger.addHandler(logFileHandler)
Log_Details.log
This is the first line of the log file.
This is the second line of the log file.
This is the second line of the log file.
This is the third line of the log file.
This is the third line of the log file.
This is the third line of the log file.
RIDE 中的消息日志部分在执行期间仅记录每行一次,但名为 Log_details.log
的文件会多次打印它们,即第一行记录一次,第二行记录两次,依此类推。
您收到 1 条消息 1、2 条消息 2 和 3 条消息 3。
那是因为您将日志记录设置作为 LogMessage
函数的一部分执行,并且每次记录消息时都会在其中添加一个文件日志处理程序...所以在第一个 运行 之后,您有 1 个记录处理程序您的消息一次,在第二次调用后您有 2 个处理程序记录您的消息两次,依此类推...
为避免这种情况,您只想配置记录器一次。
只需将您的日志记录配置移动到您将在启动脚本时调用一次的函数,然后您就可以使用:
import logging
log = logging.getLogger(__name__)
log.info('smth')
每当您想登录应用程序中的任何其他文件时。
执行从 Robot Framework 发生,其中 Test.py
已作为库导入,testLog()
正在执行,后者又导入 Logger.py
并调用 LogMessage()
.
Test.py
import Logger
def testLog():
Logger.LogMessage("This is the first line of the log file.")
Logger.LogMessage("This is the second line of the log file.")
Logger.LogMessage("This is the third line of the log file.")
Logger.py
import logging
def LogMessage(message):
LOG_FILENAME = "C://Log_Details".log"
logger = logging.getLogger()
logFileHandler = logging.FileHandler(LOG_FILENAME)
logger.addHandler(logFileHandler)
Log_Details.log
This is the first line of the log file.
This is the second line of the log file.
This is the second line of the log file.
This is the third line of the log file.
This is the third line of the log file.
This is the third line of the log file.
RIDE 中的消息日志部分在执行期间仅记录每行一次,但名为 Log_details.log
的文件会多次打印它们,即第一行记录一次,第二行记录两次,依此类推。
您收到 1 条消息 1、2 条消息 2 和 3 条消息 3。
那是因为您将日志记录设置作为 LogMessage
函数的一部分执行,并且每次记录消息时都会在其中添加一个文件日志处理程序...所以在第一个 运行 之后,您有 1 个记录处理程序您的消息一次,在第二次调用后您有 2 个处理程序记录您的消息两次,依此类推...
为避免这种情况,您只想配置记录器一次。 只需将您的日志记录配置移动到您将在启动脚本时调用一次的函数,然后您就可以使用:
import logging
log = logging.getLogger(__name__)
log.info('smth')
每当您想登录应用程序中的任何其他文件时。