如何从另一个模块访问记录器



我在从另一个模块访问从主程序创建的记录器时遇到问题。

例如:

在包装"common"中;我有一个模块";util01.py";我有一个函数get_logger:

util01.py

import logging
def get_logger(file_name,logger_level):
# get logger
logger=logging.getLogger(__name__)
# set desired level
logger.setLevel(logger_level)=
# Get needed formatter
formatter = logging.Formatter('%(asctime)s %(module)s %(lineno)d %(levelname)s %(message)s')
# Get the log file handler
fh = logging.FileHandler(file_name, mode = 'w')
# Apply formatter and level to log file handler
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger

在main.py中,我创建了该记录器:

import logging
import OSLCHelper
my_logger = util01.get_logger('c:\temp\test1.log', logging.INFO)

在main.py中,my_logger具有适当的可见性。从main,我想执行另一个模块的函数,例如OSLCHelper.py.的函数

return OSCLHelper.get_something(var1)

现在,我有了另一个模块,例如OLSCHelper.py,代码如下

import logging
from common import util01
get_something(var1):
my_logging.info("i am in getsomething method") // my_logging does not exist

不幸的是。我无法访问";my_logger";变量它确实将任何语句记录在test1.log文件中。

如何访问";my_logger";来自不同模块?有什么最佳实践吗?

请帮助

我尝试了上面的,但它不起作用

来自logging.getLogger():

所有具有给定名称的对此函数的调用都返回相同的记录器实例。这意味着记录器实例永远不需要在应用程序的不同部分之间传递。

因此,一种解决方案是取代

logger = logging.getLogger(__name__)

带有

logger = logging.getLogger("OLSC")

或者任何其他有意义的字符串,我猜。

然后你就可以一直"询问";与该名称相关联的记录器的日志记录模块,来自任何模块:

import logging
logger = logging.getLogger("OLSC")

最新更新