【问题标题】:Logger module wants to know the path of the module that initialized it记录器模块想知道初始化它的模块的路径
【发布时间】:2014-08-27 15:54:51
【问题描述】:

我在

中定义了一个自定义记录器

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

【问题讨论】:

    标签: python logging


    【解决方案1】:

    您可以使用检查模块在堆栈上查找调用者。从那里,您可以获得调用者的模块和__file__。查看Get name of calling function's module in Python - 它正在获取模块名称,但文件名也是如此。

    【讨论】:

      【解决方案2】:

      这个怎么样:

      import inspect
      os.path.abspath(inspect.stack()[-1][1])
      

      【讨论】:

        【解决方案3】:

        [编辑]:更改为 os.getcwd() 在 init 方法中执行,

        def __init__(self, name):
                self.logger_name = name
                self.path = os.getcwd()
        

        这不是更好吗?!

        【讨论】:

        • 获取定义类的模块,而不是实例化类的模块。
        猜你喜欢
        • 2010-12-27
        • 1970-01-01
        • 1970-01-01
        • 2011-07-02
        • 2020-08-18
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 2010-11-03
        相关资源
        最近更新 更多