2016-09-27 3 views
0

У меня есть два файла namley main.py и my_modules.py. В main.py я определил два лесорубов, как этотМногократный регистратор Python для нескольких модулей

#main.py 
    URL_LOGS = "logs/urls.log" 
    GEN_LOGS = 'logs/scrape.log' 
    #Create two logger files  
    formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s', datefmt="%Y-%m-%d %H:%M:%S") 
    # first file logger 
    url_info_logger = logging.getLogger('URL_Fetcher') 
    hdlr_1 = logging.FileHandler(URL_LOGS) 
    hdlr_1.setFormatter(formatter) 
    url_info_logger.setLevel(logging.DEBUG) 
    url_info_logger.addHandler(hdlr_1) 

    #second Logger 
    general_logger = logging.getLogger("GENERAL") 
    hdlr_2 = logging.FileHandler(GEN_LOGS) 
    hdlr_2.setFormatter(formatter) 
    general_logger.setLevel(logging.DEBUG) 
    general_logger.addHandler(hdlr_2) 

    module1() 
    do_something() 

В моем втором файле (my_modules.py) я должен использовать оба лесорубов, Ниже приводится пример кода для my_modules.py

#my_modules.py 
import logging 

    def module1(): 
     general_logger.info("Logger Module1") 
     url_info_logger.info("New URL found") 

    def do_something(): 
     general_logger.info("Logger Module2") 
     url_info_logger.info("Url parsed")  

Как реализовать регистраторы для доступа в my_modules.py

ответ

1

Цитата из logging documentation: Несколько вызовов в getLogger() с тем же именем всегда будут возвращать ссылку на тот же объект Logger.

Итак, что вы хотите сделать в my_modules.py, просто позвоните по номеру getLogger() с тем же именем.

#my_modules.py 
import logging 

url_info_logger = logging.getLogger('URL_Fetcher') 
general_logger = logging.getLogger("GENERAL") 

def module1(): 
    general_logger.info("Logger Module1") 
    url_info_logger.info("New URL found") 

def do_something(): 
    general_logger.info("Logger Module2") 
    url_info_logger.info("Url parsed")  

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

+1

Просто немного изменений. Также вызывается getLogger для второго регистратора, такого как general_logger = logging.getLogger ("GENERAL") – Shafiq

1

, если преобразование второго модуля в классе, вы можете просто:

  • объявить регистратор в первом modulue
  • создать новый класс, проходящий в 2 регистратора в качестве параметров
  • использовать регистратор в новом классе

Пример:

import logging 

class MyClassName: 

    def __init__(self, general_logger, url_info_logger): 
    self.general_logger = general_logger 
    self.url_info_logger = url_info_logger 

    def module1(self): 
    self.general_logger.info("Logger Module1") 
    self.url_info_logger.info("New URL found") 

    def do_something(self): 
    self.general_logger.info("Logger Module2") 
    self.url_info_logger.info("Url parsed") 

В главном

#main.py 
... 
myobj = MyClassName(general_logger,url_info_logger) 
myobj.do_something() 
myobj.module1() 
Смежные вопросы