Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于多模块的Python多记录器_Python_Logging - Fatal编程技术网

用于多模块的Python多记录器

用于多模块的Python多记录器,python,logging,Python,Logging,我有两个文件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'

我有两个文件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_模块中访问的记录器。py

引用自:使用相同名称多次调用getLogger将始终返回对相同记录器对象的引用

 #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中要做的就是再次使用相同的名称调用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")    
它应该返回相同的日志对象,因为在您第二次调用它之前已经定义了它。

引用自:使用相同名称多次调用getLogger将始终返回对相同日志对象的引用

因此,在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")    

它应该返回相同的日志对象,因为在您第二次调用它之前已经定义了它。

如果您在类中转换第二个模块,您可以简单地:

在第一个模块中声明记录器 创建将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()

如果转换类中的第二个模块,您可以简单地:

在第一个模块中声明记录器 创建将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()

只是稍微修改一下。还可以为第二个记录器调用getLogger,比如general\u logger=logging.getloggergeneral只需稍加修改。还可以为第二个记录器调用getLogger,如general\u logger=logging.getLoggerGENERAL