我需要一些帮助来了解这里发生的事情。此代码来自web2py中的models/log.py模块,旨在允许全局日志记录。
def _init_log():
logger=logging.getLogger(request.application)
...
return logger
logging=cache.ram('mylog',lambda:_init_log(),time_expire=99999999)
有人可以解释这可能会如何起作用,以及最后一行是做什么的?
谢谢 -
答案 0 :(得分:2)
这不是标准的web2py文件。 Sombody写了它,但我可以看到它的作用: 在web2py中,单个安装可以运行多个应用程序。一些用户希望在同一web2py下运行的不同应用程序具有单独的日志,因此他们需要不同的记录器对象。在web2py中没有全局设置,并且所有用户代码都在每个请求上执行,因此为了避免在每次请求时重新创建记录器,记录器对象只创建一个并存储在具有大到期时间的缓存中999 ... 9 。当http请求到达时,如果需要记录,它会在缓存中找到记录器。查看cache.ram的文档。
我使用过这个技巧但从未用于记录。
答案 1 :(得分:1)
我认为它的作用是记录功能是“memoized”。这意味着如果连续多次使用相同的参数调用它,它将从其缓存中返回旧结果。
它可能基于plone.memoize模块,但我无法检查,因为该链接对我不起作用。