Логгеры ведут запись на 2 разных выхода - PullRequest
0 голосов
/ 06 января 2020

Я хочу создать 2 регистратора, которые регистрируют 2 разных выхода в Python. Мой регистратор настроен в одном модуле, который будет использоваться двумя другими основными модулями. Моя проблема в том, что я настроил регистратор root таким образом, чтобы разрешить использование моего регистратора двумя различными основными модулями, поэтому я не могу разделить вывод журнала.

Как это можно сделать?

Вот как я настраиваю свою регистрацию:

# logger.py
import logging
def setup_logging():
    # If I give name to my getLogger, it will not be configuring root logger and my changes here cannot cascade to all other child loggers.
    logger = logging.getLogger()
    streamHandler = logging.StreamHandler()
    streamFormat = logging.Formatter('%(name)s - %(message)s')
    streamHandler.setFormatter(streamFormat)
    logger.addHandler(streamHandler)

# main1.py
import logging
from logger import setup_logging
from submodule import log_me

setup_logging()
logger = logging.getLogger('main1')

logger.log('I am from main1')
log_me()
# main2.py
import logging
from logger import setup_logging
from submodule import log_me

setup_logging()
logger = logging.getLogger('main2')

logger.log('I am from main2')
log_me()
# submodule.py
import logging

logger = logging.getLogger('submodule')

def log_me():
    logger.info('I am from submodule')

Результат от main1:

main1 - I am from main1
submodule - I am from submodule

Результат от main2:

main2 - I am from main2
submodule - I am from submodule

Вот то, чего я пытаюсь достичь (но, конечно, не удается).

# logger.py
import logging
def setup_logging():
    logger = logging.getLogger()
    streamHandler = logging.StreamHandler()
    streamFormat = logging.Formatter('%(name)s - %(message)s')
    streamHandler.setFormatter(streamFormat)
    logger.addHandler(streamHandler)

def setup_second_logging():
    logger2 = logging.getLogger()
    fileHandler = logging.FileHandler('./out.log)
    fileFormat = logging.Formatter('%(name)s - %(message)s')
    fileHandler.setFormatter(fileFormat)
    logger.addHandler(fileHandler)

- тот же main1.py -

- тот же main2.py -

# submodule.py
import logging
from logger import setup_second_logging

setup_second_logging()

logger = logging.getLogger('submodule')

def log_me():
    logger.info('I am from submodule')

Результат от main1:

main1 - I am from main1
# no submodule since it is logged to file

Результат от main2:

main2 - I am from main2
# no submodule since it is logged to file

1 Ответ

0 голосов
/ 06 января 2020

Вы можете попытаться использовать иерархия для регистраторов. Например:

logger = logging.getLogger(__name__)

И в этом случае вы можете установить определенные c обработчики для подмодулей в logger.py.

...