我在
中定义了自定义记录器/utils/my_logger.py
class MyLogger():
def __init__(self, name, path_of_module):
self.logger_name = name
self.path = path_of_module
def get_logger(self):
...
#setLevel, formatter, handler, etc.
return logger
说,在我导入并实例化MyLogger的另一个文件中。
/some/path/to/foo.py
handler = MyLogger("testing", os.path.realpath(__file__))
log = handler.get_logger()
有没有办法做到这一点,这样我每次实例化记录器时都不必显式写os.path.realpath(__file__)
作为参数?
答案 0 :(得分:4)
您可以使用inspect模块在堆栈中查找调用者。从那里,您可以获得来电者的模块和__file__
。查看Get name of calling function's module in Python - 获取模块名称,但文件名名称相同。
答案 1 :(得分:1)
这个怎么样:
import inspect
os.path.abspath(inspect.stack()[-1][1])
答案 2 :(得分:0)
[编辑]:改为os.getcwd() 在 init 方法
中执行此操作def __init__(self, name):
self.logger_name = name
self.path = os.getcwd()
不是更好吗?!