Search code examples
pythonloggingrobotframeworkrobotframework-ide

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.


Solution

  • 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.