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 ファイルではありません。だれかが書きましたが、それが何をするかはわかります。web2py では、1 つのインストールで複数のアプリを実行できます。一部のユーザーは、同じ web2py の下で実行されている別のアプリに別のログを持たせたいと考えているため、別のロガー オブジェクトが必要です。web2py にはグローバル設定がなく、すべてのユーザー コードがリクエストごとに実行されるため、リクエストごとにロガーが再作成されるのを避けるために、ロガー オブジェクトは 1 つだけ作成され、999...9 という長い有効期限でキャッシュに保存されます。 . http 要求が到着すると、ログに記録する必要がある場合は、キャッシュ内のロガーを見つけます。cache.ram のドキュメントを参照してください。

私はこのトリックを使用しましたが、ログには使用しませんでした。

于 2010-07-21T21:22:32.133 に答える
1

それがしていることは、ロギング機能が「メモ化」されていることだと思います。つまり、同じ引数で連続して複数回呼び出された場合、キャッシュから古い結果が返されます。

plone.memoizeモジュールがベースになっているのかもしれませんが、リンクがうまくいかないので確認できませんでした。

于 2010-07-21T19:43:14.633 に答える