Arijit
Arijit

Reputation: 25

Logs getting printed multiple time using FileHandler in Python

The execution takes place from Robot Framework, where Test.py has been imported as a library and testLog() is being executed, which in turn imports Logger.py and calls 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.  

The message log section in RIDE logs each line just once during execution, but the file named Log_details.log prints them multiple times, i.e the 1st line gets logged once while the 2nd gets logged twice and so on.

Upvotes: 0

Views: 166

Answers (1)

user3012759
user3012759

Reputation: 2095

You get 1x message 1, 2x message 2 and 3x message 3. That is because you perform your logging setup as part of your LogMessage function and in there you add a file log handler every time you log a message... so after first run you have 1 handler that logs your message once, after second call you have 2 handlers that log your message twice and so on...

To avoid that just you want to configure your logger only once. Just move your logging config to a function that you will call once when you start your script and from then on you can just use:

import logging
log = logging.getLogger(__name__)
log.info('smth')

whenever you feel like logging in any other file in your application.

Upvotes: 1

Related Questions