バックエンドで実行時間の長いプロセスがあり、ログにはリクエストごとに最後の 1000 回のロギング呼び出ししか保存されていません。
これはフロントエンド ハンドラーにとっては問題ではないかもしれませんが、プロセスが無期限に実行される可能性があるバックエンドにとっては非常に不便です。
ログをフラッシュして、新しいログ エントリが作成されるかどうかを確認しましたが、作成されませんでした。これは非常に間違っているように思われるので、これには簡単な解決策があるはずです。助けてください!
ありがとうございます!
更新: appengine の Google グループで既に誰かがこの件について質問しましたが、答えはありませんでした....
編集:私が懸念している「深さ」は、RequestLogs の総数ではありませんが、これは問題ありませんが、RequestLog 内の AppLogs の数 (1000 に制限されています) です。
編集2: David Popeの提案を試すために、次のテストを行いました:
def test_backends(self):
launched = self.request.get('launched')
if launched:
#Do the job, we are running in the backend
logging.info('There we go!')
from google.appengine.api.logservice import logservice
for i in range(1500):
if i == 500:
logservice.flush()
logging.info('flushhhhh')
logging.info('Call number %s'%i)
else:
#Launch the task in the backend
from google.appengine.api import taskqueue
tq_params = {'url': self.uri_for('backend.test_backends'),
'params': {'launched': True},
}
if not DEBUG:
tq_params['target'] = 'crawler'
taskqueue.add(**tq_params)
基本的に、これは 1500 行を記録するバックエンド タスクを作成し、番号 500 でフラッシュします。2 つの RequestLog が表示されると予想されます。1 つ目は 500 行で、2 つ目は 1000 行です。
結果は次のとおりです。
- ドキュメントが示唆する結果が得られませんでした。手動でログをフラッシュしても、新しいログ エントリは作成されません。1000 行の RequestLog が 1 つ残っています。しばらく前にドキュメントのこの部分を見ましたが、同じ結果が得られたので、ドキュメントが何を言っているのか理解していないと思いました。とにかく、当時、私は
logservice.flush()
バックエンド コードに呼び出しを残しましたが、問題は解決されませんでした。 - appcfg.py を使用してログをダウンロードしました。私は通常、Web UI でログを参照します。この方法でログを表示するための快適なワークフローを取得できるかどうかはわかりません...私にとって理想的な解決策は、ドキュメントに記載されているものです。
- 私のアプリの自動フラッシュ設定はデフォルトに設定されており、時々それらで遊んでいましたが、問題が解決しないことがわかったので、未設定のままにしました.
私はPythonを使用しています;)