Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python multiple logger for multiple modules

I have two files named main.py and my_modules.py. In main.py I have defined two loggers like this

    #main.py
    URL_LOGS = "logs/urls.log"
    GEN_LOGS = 'logs/scrape.log'
    #Create two logger files    
    formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
    # first file logger
    url_info_logger = logging.getLogger('URL_Fetcher')
    hdlr_1 = logging.FileHandler(URL_LOGS)
    hdlr_1.setFormatter(formatter)
    url_info_logger.setLevel(logging.DEBUG)
    url_info_logger.addHandler(hdlr_1)
    
    #second Logger
    general_logger = logging.getLogger("GENERAL")
    hdlr_2 = logging.FileHandler(GEN_LOGS)
    hdlr_2.setFormatter(formatter)
    general_logger.setLevel(logging.DEBUG)
    general_logger.addHandler(hdlr_2)

   module1()
   do_something()

In my second file (my_modules.py) I have to use both loggers, Following is the sample code for my_modules.py:

 #my_modules.py   
 import logging
    
    def module1():
        general_logger.info("Logger Module1")
        url_info_logger.info("New URL found")
        
    def do_something():
        general_logger.info("Logger Module2")
        url_info_logger.info("Url parsed")    

How do I implement loggers to be accessed in my_modules.py.

like image 498
Hafiz Muhammad Shafiq Avatar asked Jul 16 '26 08:07

Hafiz Muhammad Shafiq


1 Answers

Quote from logging documentation: Multiple calls to getLogger() with the same name will always return a reference to the same Logger object.

So what you want to do in your my_modules.py is just to call the getLogger() again with the same name.

#my_modules.py   
import logging

url_info_logger = logging.getLogger('URL_Fetcher')
general_logger = logging.getLogger("GENERAL")

def module1():
    general_logger.info("Logger Module1")
    url_info_logger.info("New URL found")

def do_something():
    general_logger.info("Logger Module2")
    url_info_logger.info("Url parsed")    

It should return the same logging object, since it is already defined before you call it the second time.

like image 135
Teemu Risikko Avatar answered Jul 17 '26 22:07

Teemu Risikko