将记录器实例传递给类

时间:2010-04-08 07:16:29

标签: python logging

我在我的项目中使用了一个开源Python库。该库使用日志记录类记录大量信息。 ...但我看不到输出或将其记录到文件中。我知道我必须创建一个记录器实例并添加一个文件处理程序或一个控制台处理程序但是如何将这个记录器实例传递给该类?这是我将要使用的类的 init 片段。

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

任何帮助?

谢谢你们。

2 个答案:

答案 0 :(得分:1)

最简单的方法是在basicConfig模块中使用logging函数。这是docs所说的:

  

通过使用默认Formatter创建StreamHandler并将其添加到根记录器来为日志记录系统进行基本配置。如果已为根记录器定义了任何处理程序,则该函数不执行任何操作。如果没有为根记录器定义处理程序,函数debug(),info(),warning(),error()和critical()将自动调用basicConfig()。

     

如果根记录器已配置处理程序,则此函数不执行任何操作。

logging模块的设计方式是将配置与创建日志消息分开,因此无需访问logger实例。

答案 1 :(得分:0)

尝试将级别设置为尽可能低(DEBUG)。这将启用所有日志级别,并应为您提供所有日志消息。执行默认配置的最简单方法是使用basicConfig()

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

如果您使用的库未覆盖日志记录配置,则此消息应足以将消息放入日志文件中。如果您知道库正在使用的记录器的名称,则可以专门设置库的级别:

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