Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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_Python 3.x_Logging - Fatal编程技术网

Python 如何从_主文件(及其配置)获取模块以使用记录器?

Python 如何从_主文件(及其配置)获取模块以使用记录器?,python,python-3.x,logging,Python,Python 3.x,Logging,如何让辅助_module.py中的记录器记录到main.py中的记录器? 下面的示例是对的改编 假设模型结构如下: module |---main.py |---auxiliary_module.py 文件main.py如下所示: import logging import auxiliary_module logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) fh = logging.FileHandl

如何让辅助_module.py中的记录器记录到main.py中的记录器? 下面的示例是对的改编

假设模型结构如下:

module
 |---main.py
 |---auxiliary_module.py
文件main.py如下所示:

import logging
import auxiliary_module

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)

ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger.addHandler(fh)
logger.addHandler(ch)

logger.info('creating an instance of auxiliary_module.Auxiliary')
a = auxiliary_module.Auxiliary()
logger.info('created an instance of auxiliary_module.Auxiliary')
logger.info('calling auxiliary_module.Auxiliary.do_something')
a.do_something()
logger.info('finished auxiliary_module.Auxiliary.do_something')
import logging

module_logger = logging.getLogger(__name__)

class Auxiliary:
    def __init__(self):
        self.logger = logging.getLogger(__name__+'.Auxiliary')
        self.logger.info('creating an instance of Auxiliary')

    def do_something(self):
        self.logger.info('doing something')
        a = 1 + 1
        self.logger.info('done doing something')
而辅助_module.py如下所示:

import logging
import auxiliary_module

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)

ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger.addHandler(fh)
logger.addHandler(ch)

logger.info('creating an instance of auxiliary_module.Auxiliary')
a = auxiliary_module.Auxiliary()
logger.info('created an instance of auxiliary_module.Auxiliary')
logger.info('calling auxiliary_module.Auxiliary.do_something')
a.do_something()
logger.info('finished auxiliary_module.Auxiliary.do_something')
import logging

module_logger = logging.getLogger(__name__)

class Auxiliary:
    def __init__(self):
        self.logger = logging.getLogger(__name__+'.Auxiliary')
        self.logger.info('creating an instance of Auxiliary')

    def do_something(self):
        self.logger.info('doing something')
        a = 1 + 1
        self.logger.info('done doing something')
这是运行main.py后日志的样子,main.py创建类实例并调用方法:

2017-04-26 13:22:00,897 - __main__ - INFO - creating an instance of auxiliary_module.Auxiliary
2017-04-26 13:22:00,897 - __main__ - INFO - created an instance of auxiliary_module.Auxiliary
2017-04-26 13:22:00,897 - __main__ - INFO - calling auxiliary_module.Auxiliary.do_something
2017-04-26 13:22:00,897 - __main__ - INFO - finished auxiliary_module.Auxiliary.do_something

如何配置辅助_module.py以使用main.py中的记录器?也就是说,如果main.py中的记录器配置为使用特定的邮件格式和处理程序,那么如何让辅助_module.py使用相同的配置

您可以简单地为两个模块使用的logging.getLogger指定一个名称,例如logger=logging。getLogger'my-logger'

只需从辅助_模块导入记录器,即从module.main导入记录器。当我这样做时,如果您直接执行main.py文件,则记录器名称仍然配置为uuuu main uuuuuu,而不是日志所来自的模块名称/类。其uuuuuu名称将为‘uuuuuu main uuuuuuu’。可能我的日志记录完全错误。目标是设置全局日志记录配置并登录到该配置,但是,为了能够识别事件来自/调用自哪个文件/模块,如果您将项目声明为正确且也是正确的,那么您的项目的模块名称将正确设置。为什么在上面的示例中,示例中的u main uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?为什么辅助模块记录器不记录到主记录器?您正在使用名称从每个文件获取记录器。在main.py中,名称将是main。在auxiliiary_module.py中,_name_uu将是辅助_模块。因此,您明确要求使用两个不同的记录器。那么记录器需要在每个模块中指定处理程序、格式化程序等?有没有一种方法可以在全局级别上为所有记录器设置记录器配置?没有,您可以配置记录器一次,然后让其他记录器按名称连接到记录器,如我的示例所示。您还可以动态地将记录器添加到根记录器、子记录器,基本上可以添加任何内容。日志记录在Python中是一个奇怪的复杂概念,最好的资源是官方的Python文档。谢谢,这澄清了问题。同意可以简化日志记录。