如何防止快捷方式日志函数用python日志覆盖lineno?

如何防止快捷方式日志函数用python日志覆盖lineno?,python,logging,Python,Logging,假设我需要系统地为一个记录器添加一些额外的信息,然后这个记录器将在一些类中使用 我会使用一种看起来有点像这样的模式: import logging logger = logging.getLogger(__name__) format_ = '%(asctime)s %(l

假设我需要系统地为一个记录器添加一些额外的信息,然后这个记录器将在一些类中使用

我会使用一种看起来有点像这样的模式:

import logging                                                                   

logger = logging.getLogger(__name__)                                             
format_ = '%(asctime)s %(levelname)s [%(name)s: %(lineno)s] -- %(message)s'         
handler = logging.StreamHandler()                                                
handler.setFormatter(logging.Formatter(format_))                                 
logger.addHandler(handler)                                                       
logger.setLevel(logging.INFO)                                                    


class A(object):                                                                 
    def log_thing(self, msg, *args, **kwargs):                                   
        logger.info(msg, *args, **kwargs)                                        

    def do_something(self):                                                      
        # Some code here                                                         
        self.log_thing('Everything is ok')                                       


if __name__ == "__main__":                                                       
    a = A()                                                                      
    a.do_something()                               
但是,如果运行此代码,您会注意到“lineno”将显示为完成“logger.info”的实际代码的行(第13行)


有没有一种简单的方法来防止这种行为,并打印名为“log_thing”(第17行的代码)的行号?或者“记录的快捷方式”函数注定要这样做吗?

摆脱
log\u东西
,总是直接调用
logger.info(“一切正常”)
。这就是
日志记录
模块的用途。这不是一个选项,尽管我同意这是最简单的解决方案。我需要为每个日志记录提供大量的元数据(实际的代码比我的示例做的要多),这些元数据都来自将执行此日志记录的类的属性,因此使用了一个方法。摆脱
log\u thing
,始终直接调用
logger.info(“一切正常”)
。这就是
日志记录
模块的用途。这不是一个选项,尽管我同意这是最简单的解决方案。我需要为每个日志记录提供大量的元数据(实际代码比我的示例做的要多),这些元数据都来自将执行此日志记录的类的属性,因此使用了一个方法。