如何防止快捷方式日志函数用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(“一切正常”)
。这就是日志记录
模块的用途。这不是一个选项,尽管我同意这是最简单的解决方案。我需要为每个日志记录提供大量的元数据(实际代码比我的示例做的要多),这些元数据都来自将执行此日志记录的类的属性,因此使用了一个方法。