2

django Web アプリケーションのログ システムを作成することを考えています。Web アプリケーションは非常に広範囲に使用できる (ビジネス プロセスのすべての側面をカバーする) ため、発生するすべてのイベントを追跡したいと考えています。具体的には、「メイン」ビューだけでなく、実行されているすべてのビューをログに記録し、潜在的に、実行されたビュー内で何が起こっているかをログに記録したいと考えています。

ロギング システムの「アイデア」段階にいる間に、いくつかの質問にすぐに答えてしまったので、どのように進めればよいかわかりません。主な質問は次のとおりです。

  • メインの Web アプリがデータを保持しているのと同じ MySQL データベースにすべてのイベントを記録することを考えています。私が懸念しているのは、MySQL データベースを巨大な DB に肥大化させることです。また、DB が何らかの形でクラッシュまたは破壊された場合 (はい、バックアップがあります)、ログも失われ、問題を追跡する能力が失われます。別の DB を使用するか、それともテキスト ファイルのみを使用するか?
  • どこまで細分化するか? 最初は、「Date - In view myView」のようなものを単純にログに記録することを考えていました。ただし、私が考えているように、ビュー内で発生するすべてのことをログに記録するとよいでしょう。これを行うと、ログが巨大になる可能性があります! また、コードに非常に多くのログエントリ行が混在しているため、コードが醜くなります。この種の詳細:
    • 日付 - 入力ビュー myView
    • 日付 - ビュー myView で、DB からオブジェクト myObject を取得しました
    • 日付 - ビュー myView で、myObject フィールド myField を myNewValue に設定します
    • 日付 - myView を離れる

以上が現時点での私の主な考えです。この面で何かアドバイスはありますか?

ありがとう

4

2 に答える 2

6

最善かつ正しい方法は、実際に必要なものすべてをログに記録できる独自のカスタム ミドルウェアを作成することだと思います。

この件に関するいくつかのリンクを次に示します。

また、ログをデータベースに書き込む代わりに、 sentryエラー ログと集計プラットフォームの使用を検討してください。参考までに、ロギングにデータベースを使用するを参照してください。

于 2013-09-10T18:10:55.853 に答える
0

すべてのビューで実行されたアクションをログに記録する場合は、たとえば、次の単語の行でentered view Aとを置き換えることができます: . alecxe が述べたように、リクエスト/SQL をログに記録できます。ミドルウェアでそれを行う方法はたくさんあります。データベース (オブジェクト) アクションについては、個々の 、 、およびをシグナルで結び付けることができます。バルクおよびs の場合、ロギングを追加するためにモンキー パッチ マネージャーおよびクエリセット メソッドを使用できます (クリーンな方法ではありませんが、機能します)。このようにして、SQL ではなくアクションをログに記録できます。次のような行が表示されます。exited view Aview A - 147mssaveupdatedeleteupdatedelete

[2013/09/11 15:11:12.0153] view   app.module.view       200  148ms
[2013/09/11 15:11:12.0189] orm    save:auth.User,id=1        3ms

これは素早い汚い提案ですが、おそらくそれだけの価値があります。

于 2013-09-10T19:12:59.597 に答える