使自定义记录器可跨多个模块使用

时间:2019-08-23 08:41:16

标签: python logging

我已经使用python创建了一个自定义记录器,并将其用作实用程序。我创建了基于上下文的应用程序,并使用针对不同情况的自定义处理程序创建了它。我试图使我的自定义记录器在所有模块中可见。但是我无法做到这一点。我不想仅在记录器中重复使用这些行,而仅将其传递给上下文和配置。

   city district     id  price       date
0    hz       xs  20101    1.5   2019/8/1
1    hz       xs  20101   50.0   2019/7/1
2    hz       xs  20101    2.0   2019/6/1
3    hz       xs  20101    2.2   2019/5/1
4    hz       sn  20101    2.2   2019/4/1
5    hz       sn  20102    2.1  2018/10/1
6    hz       sn  20102   70.0   2019/3/1
7    hz       sn  20102    2.2   2019/2/1
8    hz       sn  20102    nan   2019/1/1
9    hz       sn  20102    2.0  2018/12/1
10   hz       sn  20102    2.2  2018/11/1
11   xz       pd  20103    2.9   2015/7/1
12   xz       pd  20103    2.0   2015/8/1
13   xz       pd  20103    2.5   2015/9/1
14   xz       pd  20103    3.0  2015/10/1
15   xz       pd  20103   35.0  2015/11/1
16   xz       pd  20103    3.2  2015/12/1
17   xz       pd  20103    3.1   2016/1/1
18   xz       pd  20103    nan   2016/2/1
19   xz       pd  20103    nan   2016/3/1
20   xz       pd  20103    nan   2016/4/1

在我的主模块中,我只是使记录器对象成为全局对象,以便其他方法可以使用记录器,而无需任何其他附加组件。有什么办法可以跨模块做同样的事情吗?

在许多类似的查询中。建议的是

logger = myLogger(config, context) # config has data for context based custom handling

但是,这也不会传递给我的自定义处理程序。

有人可以建议我如何实现这一目标。

使我的自定义记录器在整个运行时都处于全局状态,这样我就不必在需要时声明。

我的代码就是这样

logger = logging.getLogger(__name__)

1 个答案:

答案 0 :(得分:0)

我的操作方式:

Logging.py

import logging

# Your custom stuff

logger = myLogger(config, context)

Every_other_file.py

from Logging import logger

编辑:稍后更改配置

Logging.py

import logging

# Your custom stuff

logger = myLogger(config, context)

def change_config(config):
    global logger
    logger = myLogger(config, context)

def set_logger(config)
    global logger
    logger = myLogger(config.context)

** main.py **

config = something
Logging.set_logger(config)

类似的东西。我的意思是,您可以使用它来调用方法,也可以更改值