Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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/logging/2.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 在一个地方初始化记录器,如_init.py___Python_Logging_Config_Init - Fatal编程技术网

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
文件夹,因为这只是我的记录器的文件夹,它现在取决于用户如何配置,因为它应该是根据链接的样式指南