184

Is there a way in Python to get a list of all defined loggers?

I mean, does something exist such as logging.getAllLoggers() which would return a list of Logger objects?

I searched the python.logging documentation but couldn't find such a method.

2

3 Answers 3

295

Loggers are held in a hierarchy by a logging.Manager instance. You can interrogate the manager on the root logger for the loggers it knows about.

import logging

loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]

Calling getLogger(name) ensures that any placeholder loggers held by loggerDict are fully initialized when they are added to the list.

Sign up to request clarification or add additional context in comments.

6 Comments

In fact, getting the dict of Logger per name is better than simply a list of Logger alone, so logging.root.manager.loggerDict was exactly what I was searching for, thank you!
A small note here is that root logger is not returned by this snippet.
Anyone has an explanation about why PyCharm's linting warns about this snippet: Unresolved attribute reference 'manager' for class 'RootLogger'? I know it can be easily disabled, but still...
Note you can access the manager from any logger, i.e. my_logger.manager is logging.root.manager. From the source: "There is [under normal circumstances] just one Manager instance ..."
pylint doesn't seem to found it. I get a no-member reported for loggerDict.
|
45

If you want to include RootLogger in the list as well, do something similar to:

import logging
loggers = [logging.getLogger()]  # get the root logger
loggers = loggers + [logging.getLogger(name) for name in logging.root.manager.loggerDict]

tested on Python 3.7.4

1 Comment

This was what solved it for me: the missing root logger was the source of all the problems I had.
17

If you are trying to examine the hierarchy of logging objects, I'd recommend using logging_tree.printout():

import logging_tree

logging_tree.printout()

Or, if you want to have the logging tree accessible to your code:

logging_tree.tree()

See https://pypi.org/project/logging_tree/ for more info.

1 Comment

I would have preferred to do it without depending on a third party library, but thank you for the link :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.