我正在通过python Web flask应用程序实现日志记录。下面是一个示例结构
controller-com.org.python.MainController
的路由说/ login,/ doSomething,/ logout
每条路由都在单独的模块中调用单独的方法,
com.org.python.login.begin()
com.org.python.dosomething.execute()
com.org.python.logout.end()
我的主控制器路由有权访问已调用事务的用户ID和生成的唯一事务ID。我可以使用记录器轻松记录此信息。
用例:我还需要在较低级别的模块中记录用户ID和事务ID,而无需将详细信息作为参数传递
我怎么能做到相同?
到目前为止的解决方案
class CustomFilter(logger.Filter):
def __init__(self, username, trid):
self.username = username
self.trid = trid
def filter(record):
record.username = self.username
record.trid = self.trid
我已按照上述说明将过滤器添加到记录器
maincontroller.py
def login(username):
trid = ....
log = logger.getLogger("something")
log.addFilter(CustomFilter(username, trid))
#handlers, formatters added as used
log.info("inside login method")
#import login module
login.begin()
login.py
def begin():
log = logger.getLogger("something")
log.info("im inside begin method in login module")
### something something
上面的方法很好,即使在模块之间,用户名和Trid也可以打印在任何地方。 但是,到处都使用相同的Trid和用户名。甚至不是同一用户发起的交易。我们需要清除过滤器吗?如何在所需的用户名和差异试算中实现差异交易
P.S:出于某种原因,loggerAdaptors无法正常工作。适配器中的信息不会在模块调用之间转移
请帮助。