我在从另一个模块访问从主程序创建的记录器时遇到问题。
例如:
在包装"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")