2

我需要一些帮助来了解这里发生了什么。此代码来自 web2py 中的models/log.py模块,旨在允许全局日志记录。

def _init_log(): 
    logger=logging.getLogger(request.application) 
    ...
    return logger 

logging=cache.ram('mylog',lambda:_init_log(),time_expire=99999999)

有人能解释一下这可能是如何工作的,最后一行是做什么的吗?

谢谢 -

4

2 回答 2

2

这不是标准的 web2py 文件。Sombody 写了它,但我可以看到它的作用:在 web2py 中,一个安装可以运行多个应用程序。一些用户希望在同一个 web2py 下运行的不同应用程序具有单独的日志,因此他们需要不同的记录器对象。在 web2py 中没有全局设置,所有用户代码都在每个请求上执行,因此为了避免在每个请求中重新创建记录器,记录器对象只创建一个并存储在缓存中,过期时间较长 999...9 . 当一个 http 请求到达时,如果它需要记录,它会在缓存中找到记录器。查看 cache.ram 的文档。

我使用过这个技巧,但从未用于日志记录。

于 2010-07-21T21:22:32.133 回答
1

我认为它的作用是记录功能是“记忆化的”。这意味着如果连续多次使用相同的参数调用它,它将从其缓存中返回旧结果。

它可能基于plone.memoize模块,但我无法检查,因为该链接对我不起作用。

于 2010-07-21T19:43:14.633 回答