开发者

Pass logger instance to class

I'm using a open-source Python library in my project. This library logs a lot of information using the logging class. ...but I c开发者_开发问答an't see the output or log it to file. I know that i would have to create a logger instance and add a file-handler or a console-handler to it but how can i pass this logger instance to the class? Here's the init snippet of the class that I'm going to be using.

class Periscope:
        ''' Main Periscope class'''

        def __init__(self):
                self.config = ConfigParser.SafeConfigParser({"lang": "en"})
                if is_local:
                        self.config_file = os.path.join(bd.xdg_config_home, "periscope", "config")
                        if not os.path.exists(self.config_file):
                                folder = os.path.dirname(self.config_file)
                                if not os.path.exists(folder):
                                        logging.info("Creating folder %s" %folder)
                                        os.mkdir(folder)
                                logging.info("Creating config file")
                                configfile = open(self.config_file, "w")
                                self.config.write(configfile)
                                configfile.close()
                        else:
                                #Load it
                                self.config.read(self.config_file)

                self.pluginNames = self.listExistingPlugins()
                self._preferedLanguages = None

Any help?

Thanks guys.


Simplest way will be to use basicConfig function in logging module. Here's what docs are saying:

Does basic configuration for the logging system by creating a StreamHandler with a default Formatter and adding it to the root logger. The function does nothing if any handlers have been defined for the root logger. The functions debug(), info(), warning(), error() and critical() will call basicConfig() automatically if no handlers are defined for the root logger.

This function does nothing if the root logger already has handlers configured.

logging module is designed in a way that configuration is separated from creating log messages, so there's no need of having access to logger instance.


Try setting the level to the lowest possible (DEBUG). This enables all log levels and should give you all logging messages. The simplest way to do default configuration is to use basicConfig()

import logging    
logging.basicConfig(level=logging.DEBUG, filename='/path/to/mylog.log')

If the library you are using doesn't override the logging configuration this should be enough to get messages into the log file. If you know the name of the logger the library is using, you can set the level for the library specifically:

logging.getLogger("periscope").setLevel(logging.DEBUG)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜