Печать журналов несколько раз с использованием FileHandler в 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-я строка регистрируется один раз, а 2-я регистрируется дважды и так далее.
1 ответ
Вы получаете 1x сообщение 1, 2x сообщение 2 и 3x сообщение 3. Это потому, что вы выполняете настройку регистрации как часть вашего LogMessage
и там вы добавляете обработчик файлового журнала каждый раз, когда вы регистрируете сообщение... так что после первого запуска у вас есть 1 обработчик, который регистрирует ваше сообщение один раз, после второго вызова у вас есть 2 обработчика, которые регистрируют ваше сообщение дважды и так далее..,
Чтобы избежать этого, вы просто хотите настроить свой регистратор только один раз. Просто переместите конфигурацию регистрации в функцию, которую вы будете вызывать один раз при запуске скрипта, и с этого момента вы можете просто использовать:
import logging
log = logging.getLogger(__name__)
log.info('smth')
всякий раз, когда вы хотите войти в любой другой файл в вашем приложении.