Python 在一个地方初始化记录器,如_init.py__
我正在做一个项目,我想实现一个记录器。我的结构如下:Python 在一个地方初始化记录器,如_init.py__,python,logging,config,init,Python,Logging,Config,Init,我正在做一个项目,我想实现一个记录器。我的结构如下: . ├── mypkg/ │ ├── __init__.py │ ├── config/ │ │ ├── __init__.py │ │ ├── config.json │ │ ├── config.py │ │ └── logger.yml │ ├── mod1/ │ │ └── __init__.py │ │ ├── script11.py │ └── mod2/ │
.
├── mypkg/
│ ├── __init__.py
│ ├── config/
│ │ ├── __init__.py
│ │ ├── config.json
│ │ ├── config.py
│ │ └── logger.yml
│ ├── mod1/
│ │ └── __init__.py
│ │ ├── script11.py
│ └── mod2/
│ ├── __init__.py
│ ├── script21.py
│ ├── script22.py
│ ├── script23.py
│ └── script24.py
├── README.md
├── requirements.txt
├── setup.py
└── tests/
预先注意:我已经创建了指向文件的链接,以便进行更深入的调查,但我相信所有内容都应该一次就可以理解,但这些链接是为了完整性而存在的
但是,我正在分发和测试它,因此我希望第一个是fileHandler
,第二个是consoleHandler
(在中定义)。我正在切换一些内容和设置,所以当我调整记录器的名称时,我希望有一个地方可以快速更改它,而不是进入每个文件并调整记录器命令
现在,我正在使用config/
保存一些配置信息。我真的不喜欢这种方法,如果可能的话,我想完全删除这个文件夹。现在,我在配置中读取了每个script**.py
的开头,比如Config('Config/Config.json')
,其中我的Config
是中定义的一个类,用于读取.json
文件并将其转换为dict,看起来就像:
{
"LOGGER": "consoleLogger"
}
因此,如果我想使用consoleLogger
或fileLogger
我只需在config.json
中更改它,我就完成了。然而,我不喜欢仅仅为了这个目的而有一个完整的配置文件,我想知道是否可以将我在每个script**.py开始时的初始化移动为:
from mypkg.config import Config
config = Config("config/config.json")
logger = logging.getLogger(config["LOGGER"])
例如,到mypkg/
文件夹中的\uuu init\uuuuuuuuuupy
,或类似的内容:
logger = logging.getLogger(`consoleLogger`)
我想听听您对此的意见。因此,像这样初始化记录器的整个目标是它适合于库,并最终作为一个包发布mypkg
。我对这个主题进行了更多的研究,并找到了一个链接via,它引用了Python的链接,所有这些链接都表明定义处理程序始终是用户的事情,而不是开发人员的事情。因此,我已切换到在每个文件的开头使用
logger = logging.getLogger(__name__)
如果在script11.py
中调用此getLogger
,则应创建一个,例如mypkg.mod1.script11
。此外,如果没有为记录器设置特定操作,它将查看其父级的设置。用户现在可以定义特定于包的记录器mypkg
,或者只定义root
记录器的操作
我还将此添加到我的mypkg/\uuuu init\uuuuu.py
:
import logging
logger = logging.getLogger(__name__)
这样用户就可以简单地使用
from mypkg import logger
并根据自己的需要配置依赖于包的记录器
我已经删除了整个config
文件夹,因为它只用于我的记录器,现在用户依赖于它的配置方式,因为它应该根据链接的样式指南进行配置。因此,像这样初始化记录器的整个目标是它适合于库,最终作为一个包发布mypkg
。我对这个主题进行了更多的研究,并找到了一个链接via,它引用了Python的链接,所有这些链接都表明定义处理程序始终是用户的事情,而不是开发人员的事情。因此,我已切换到在每个文件的开头使用
logger = logging.getLogger(__name__)
如果在script11.py
中调用此getLogger
,则应创建一个,例如mypkg.mod1.script11
。此外,如果没有为记录器设置特定操作,它将查看其父级的设置。用户现在可以定义特定于包的记录器mypkg
,或者只定义root
记录器的操作
我还将此添加到我的mypkg/\uuuu init\uuuuu.py
:
import logging
logger = logging.getLogger(__name__)
这样用户就可以简单地使用
from mypkg import logger
并根据自己的需要配置依赖于包的记录器
我已经删除了整个config
文件夹,因为这只是我的记录器的文件夹,它现在取决于用户如何配置,因为它应该是根据链接的样式指南