我的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.
基本上我需要的是这样的东西。我想初始化一次记录器,我应该可以在整个应用程序的任何地方使用它。我怎么能这样做?
答案 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
时,您可以访问之前定义的每个记录器(当然,您可以定义新的记录器)。