如何从Web应用程序中的其他模块访问记录器对象

时间:2012-01-11 06:40:38

标签: python global-variables scope web.py

我的main.py如下:

import logging
import os
import web

def is_test():
  if 'WEBPY_ENV' in os.environ:
    return os.environ['WEBPY_ENV'] == 'test'

app = web.application(router.urls, globals())

logging.basicConfig(filename="log/debug.log", level=logging.INFO)
global logger
logger = logging.getLogger("debug")

if (not is_test()) and __name__ == "__main__":
  app.run()

现在,我在这里将一个名为logger的变量定义为全局变量。那么,我可以在我的应用程序中的任何地方访问此变量而不重新定义它吗?我正在使用web.py. 基本上我需要的是这样的东西。我想初始化一次记录器,我应该可以在整个应用程序的任何地方使用它。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您不需要访问任何全局变量,因为logging模块已经提供了对代码中任何位置的记录器对象的访问权限,也就是说,如果您使用:

logger = logging.getLogger("debug")

在其他模块中,您将获得与主模块中相同的记录器对象。

答案 1 :(得分:1)

当你可以调整记录器的级别来获取调试消息时,我不完全理解为什么你使用“调试”记录器,但也许你的只是一个例子或你真的需要它,所以让我们得到重点:

official documentation标准库模块提供日志API的关键好处是 所有Python模块都可以参与日志记录, 因此,您的应用程序日志可以包含与第三方模块中的消息集成的消息。

这意味着您只需要在应用程序开始时配置日志记录,然后在需要记录器时调用logging.getLogger(name)并获得该记录器。

因此,无需使用以下代码“跟踪”logger变量

global logger
logger = logging.getLogger("debug")

因为无论何时您需要从"debug"记录器(在任何您想要的中间)登录,您只需执行以下操作:

my_debug_logger = logging.getLogger("debug")
my_debug_logger.info('some message')

最后一点是,当您导入日志记录模块import logging时,您可以访问之前定义的每个记录器(当然,您可以定义新的记录器)。