I have a main file where I use all the functions from the module. I want to log all the necessary things into file and into stdout.
It works when I use logger.info("Write it into file")
inside main file, but it doesn’t work when I import here some functions from the other scripts.
I use it inside main file to make a logger
logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) # create file handler fh = logging.FileHandler('logging.log', mode='a') fh.setLevel(logging.DEBUG) # create console handler ch = logging.StreamHandler(sys.stdout) ch.setLevel(logging.INFO) # create formatter and add it to the handlers formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) # add the handlers to the logger logger.addHandler(fh) logger.addHandler(ch)
And in other file I use only
logger = logging.getLogger(__name__)
How can I get all the logs?
Advertisement
Answer
__name__
has different values in your two modules, so you really have two different loggers. You are only adding the file handler to one of them.
You want to configure a common ancestor. That could be the root logger:
root_logger = logging.getLogger() ... root_logger.addHandler(fh) root_logger.addHandler(ch)
or a specific logger that only your two loggers inherit from.
base_logger = logging.getLogger('base') # configure base_logger logger_in_main = logging.getLogger('base.' + __name__)
and
logger_in_other = logging.getLogger('base.' + __name__)