How to ignore log entries from imported modules (not written by me)?
The setup:
import logging
import <someOtherModule>
logging.basicConfig(level=logging.INFO)
class myClass:
...
def some_method(self):
logging.info('calling module')
someOtherModule.function()
logging.info('stuff happened')
if __name__ == "__main__":
a = myClass().some_method()
The Log:
INFO:root:calling module
INFO:<someOtherModule>.<some dependency> <random dependency message here>
INFO:root:stuff happened
How can I get rid of that middle message?
I was not able to find an answer after looking at the logging documentation or by googling.
I found this answer but the workaround does not seem to work for me.
For the curious ones the actual log entry is:
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): <address here>
getLogger(name) is typically executed. The getLogger() function accepts a single argument - the logger's name. It returns a reference to a logger instance with the specified name if provided, or root if not. Multiple calls to getLogger() with the same name will return a reference to the same logger object.
FileHandler. The FileHandler class, located in the core logging package, sends logging output to a disk file. It inherits the output functionality from StreamHandler . class logging. FileHandler (filename, mode='a', encoding=None, delay=False, errors=None)
import logging. With the logging module imported, you can use something called a “logger” to log messages that you want to see. By default, there are 5 standard levels indicating the severity of events. Each has a corresponding method that can be used to log events at that level of severity.
One work around(which I admit not a pretty one though), is to use the logging.disable method to disable the INFO logs at the time of calling the dependency methods.
class myClass:
...
def some_method(self):
logging.info('calling module')
logging.disable(logging.INFO)
someOtherModule.function()
logging.disable(logging.NOTSET)
logging.info('stuff happened')
One advantage, I think, this gives you is that if there are any errorwarning/critical failure log messages are to be reported by the dependency module, this will allow only them. You can set the disable attribute to logging.WARNING to report only error or failure messages.
We have different levels for logging, like:
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
So, if you don't want to see INFO
level, just raise the level, like:
logging.basicConfig(level=logging.CRITICAL)
Don't forget to change level of log for your wanted information to CRITICAL
.
OR:
Try this:
...
logger = logging.getLogger()
...
logger.disabled = True
someOtherModule.function()
logger.disabled = False
...
Hope your issue solves. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With