Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

logging - how to ignore imported module logs?

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>  
like image 946
Randi Avatar asked Dec 29 '14 08:12

Randi


People also ask

What does logging getLogger (__ Name __) do?

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.

What is FileHandler in logging?

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)

What is Python import logging?

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.


2 Answers

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.

like image 164
thiruvenkadam Avatar answered Oct 04 '22 19:10

thiruvenkadam


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. :)

like image 23
Stephen Lin Avatar answered Oct 04 '22 21:10

Stephen Lin