Как получить доступ к объекту регистратора из других модулей в веб-приложении - PullRequest
0 голосов
/ 11 января 2012

У меня есть 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 ]

2 голосов
/ 11 января 2012

Вам не нужно обращаться к какой-либо глобальной переменной, поскольку модуль logging уже обеспечивает доступ к объектам регистратора в любом месте вашего кода, то есть, если вы используете:

logger = logging.getLogger("debug")

в других модулях вы получите тот же объект логгера, что и в основном модуле.

1 голос
/ 11 января 2012

Я не до конца понимаю, почему вы используете «отладочный» регистратор, когда вы можете настроить уровень своего регистратора, чтобы получать отладочные сообщения, но, возможно, ваш был просто примером или вам это действительно нужно, так что давайтек пункту:

Из официальной документации : Ключевым преимуществом использования 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, у вас есть доступ ко всем ранее определенным регистраторам (и, конечно, вы можете определять новые).

...