记录器模块想知道初始化它的模块的路径

时间:2014-08-27 15:54:51

标签: python logging

我在

中定义了自定义记录器

/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__)作为参数?

3 个答案:

答案 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()

不是更好吗?!