2017-01-04 2 views
1

Допустим, у меня есть такой код:Python - использование регистратора внутри функции из модуля вызова его

ModuleA.py:

import logging 
logger = logging.getLogger('A') 

def utility_func(): 
    logger.info('hi') 
print utility_func() 

ModuleB.py:

import logging 
logger = logging.getLogger('B') 
from ModuleA import utility_func 

print utility_func() 

Когда utility_func является вызванный из ModuleA.py. Я хочу, чтобы он использовал регистратор «A», и когда он вызывается из ModuleB.py, я хочу, чтобы он использовал регистратор «B».

Есть ли способ сделать это? Или лучший способ настроить ситуацию?

Update:

насчет идеи изменения utility_func к:

def utility_func(): 
    logging.info('hi') 

бы, что пузырь до какого журнала код вызова использует?

+0

Вы можете явно передать регистратор, я полагаю. Обратите внимание, что обычно вы должны использовать 'logging.getLogger (__ name __)' для установки текущего имени модуля. – jonrsharpe

+0

У меня есть «A» и «B», настроенные в другом месте, чтобы выполнять разные способы ведения журнала. – Greg

ответ

0

Поместите это в отдельный файл (например utils.py)

def utility_func(logger): 
    logger.info('hi') 

Затем в файле ModuleA.py

import logging 
import utils 

logger = logging.getLogger(__name__) 
print utility_func(logger) 
0

Вот что я в конечном итоге происходит с. Но мне все еще интересно узнать, есть ли более элегантный способ.

ModuleB.py:

import logging 
import ModuleA 

logger = logging.getLogger('B') 
ModuleA.logger = logger 

print ModuleA.utility_func() 
Смежные вопросы