我有两个文件namley main.py和my_modules.py。在main.py中我定义了两个这样的记录器
#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
中实现要访问的记录器答案 0 :(得分:4)
来自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 :(得分:1)
如果你在一个类中转换第二个模块,你可以简单地:
示例:
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()