从包中的多个模块登录无法从 __main__ 工作

卢多

我正在尝试在我的项目中实现日志记录,并希望所有模块都记录到同一个文件中。如果我在init 中设置记录器,我设法让它工作,但如果我在main 中设置它就不行当我在main 中设置它时,它只记录来自main而不是其他模块的语句

我想在main 中设置它,以便我可以将 dictConfig 中记录器的配置放在 config.py 文件中。当我从init执行此操作时,import 语句出现问题。

这是我在 ___main____.py 中的内容:

import logging
from logging.config import dictConfig
import config as cfg

if __name__ == '__main__':
    dictConfig(cfg.logging)
    logger = logging.getLogger()
    logger.info('Completed configuring logger()!')
    main()

在 config.py 中:

logging = dict(
    version = 1,
    formatters = {
        'f': {'format':
              '%(asctime)s %(name)-12s %(levelname)-8s %(message)s'}
        },
    handlers = {
        'h': {'class': 'logging.StreamHandler',
              'formatter': 'f',
              'level': logging.INFO},
        'r': {'class': 'logging.handlers.RotatingFileHandler',
                'filename': 'data/logger.log',
                'formatter':'f',
              'maxBytes': 10000,
              'backupCount':5},
        },
    root = {
        'handlers': ['h', 'r'],
        'level': logging.INFO,
        },
)

在后端.py:

import logging
logger = logging.getLogger(__name__)

class Backend(object):

    def __init__(self, dbi):
        self._dbi = dbi

    def getDimensionTableColumns(self, table_name):
        logger.warning('still not working')

我的 logger.log 文件和终端中的输出是:

2018-03-07 09:48:00,858 root         INFO     Completed configuring logger()!

而且我知道 getDimensionTableColumns 正在运行,因为如果我将打印语句输出到终端。

有人可以解释一下出了什么问题,为什么?

弘主角

您正在使用两种不同的记录器:模块中的根记录器(已配置)__main__(使用 获得的那个logger = logging.getLogger())和被调用的记录器__name__ = 'backend'(不是)。

你可以使用默认的记录器在backend.py使用

logger = logging.getLogger()  # no __name__ !

或者您可以配置一个命名记录器并在两个模块中使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以创建不导入__main__模块的Python多处理子进程/工作进程?

找不到'__main__'模块

unittest,在本地工作,但不在远程服务器上,没有名为x .__ main__的模块;'x'是一个包,不能直接执行

virtualenv:找不到'__main__'模块

__main__和python中的作用域

无法从气流获取模块“ __main__”上的属性“ ClassName”

<function __main __。add_numbers(x,y)>中的__main__

python在Azure Pipelines的'.py'中找不到'__main__'模块

转到GAE错误:找不到'__main__'模块(Win 8.1)

使用相对导入作为__main__运行模块

Docker python3:找不到“__main__”模块

Python泡菜:ImportError:没有名为__main__的模块

Python:在其中找不到“__main__”模块

为什么不将__name__ =='__main__'放在模块的开头?

错误:没有名为“ __main __。forms”的模块;'__main__'不是Python3中的软件包

将多个参数传递给 Python __name__=="__main__"

导入错误:无法从“__main__”导入名称 some_name

不从__main__运行时无法打开文件

多处理中__main__外部变量与内部变量的定义

如果在IPython中__name__ =='__main__'

如何在“if __name__ == '__main__'”中模拟.patch 变量

多处理池映射每个工作线程在 __main__ 块外运行代码

如何使 __main__ 同时成为包 -OR- 脚本和包子模块

如何让模块使用 __main__ 文件(及其配置)中的记录器?

如何在python3中使用pyclbr搜索__main__模块?

Hypercorn-在文件夹中找不到__main__模块

如何在Python中获取__main__模块的文件名?

使用python软件包在'<packageName>'中收到'找不到'__main__'模块

pickle / joblib AttributeError:模块'__main__'在pytest中没有属性'thing'