実行中のアプリケーションはログを書き出しています。次に、ログに記録されているかどうかについてステータスメッセージをチェックすることで、インデックス作成が完了したかどうかを確認する必要があります(ロギングが動的に進行し、プロセスが実行されていることに注意してください)。私のアプリケーションでは、インデックス作成のプロセスが完了した時点に関する信号は送信されず、単にログに記録され、他の処理が行われます。ステータスをログに記録しているかどうかを確認するためにログを継続的にポーリングする必要がありますが、それはアンチパターンまたは悪い設計のようなものです。私も忙しい待っているか何もループをしていないし、チェック、別の悪いデザインを持っていない。どのくらいの頻度でログに入力したエントリを最良の方法でチェックすることができますか?一般的なログパーサーアルゴリズム
1
A
答えて
1
ポーリングは通常の解決策です。他の解決策では、何らかの形で生成プロセスの協力が必要です。これは が可能な場合は明らかに望ましい解決策ですが、生成する プロセスがリスナーに気付かれないようにするには( という意味で)、ポーリングは唯一有効な ソリューションです。 (ログ機能に応じて、 がログを名前付きパイプに配置して読み取ることができるかもしれません)。
ポーリングは、実行していない場合に必ずしも高価ではありません。 それはあまりにもしばしば。そのログの解析を想定し
1
両方のプログラム(ログの読み取りと書き込み)を制御する場合、最も簡単な解決策は、何らかのプロセス間通信(信号など)を使用して完了したときにライターにすべてのリスナーを通知させることです。
IPCが不可能な場合のみ、変更をポーリングするよりスマートな方法を検討する必要があります。ほとんどのオペレーティングシステムでは、ファイルやディレクトリが変更されたときにコールバックを登録できます。いくつかの提案についてはthis questionを見てください。
0
はあなたが持っている唯一の選択肢である、あなたが探しているイディオムがあり、次のハイレベル表現(UNIX CLIスタイル)
# tail -f logfile.txt | grep STATUS_PATTERN
(1)「は、tail -f」プリントを持っていますlogfile.txtに追加された新しい行を取り出し、実際のパターンマッチングを実行する(2) "grep"に渡します。
(1)と(2)の両方の機能は、独立したスレッド/プロセスとしてJava/C++で実装され、定期的なポーリングより軽量なロードを提供するのは簡単です。 また、ログのローテーション条件を検出するために、少しだけ特別な機能が必要になります。
関連する問題
- 1. 一般的なドロップダウンリスト
- 2. 一般的なクエリメソッド
- 3. 一般的なリダイレクト
- 4. 一般的なインターネットファイルシステム
- 5. 一般的なパラメータタイプ
- 6. 一般的な/一般的なAndroid搭載端末のタッチポイント数
- 7. 一般的なvar C++
- 8. 一般的な.Net Web Services
- 9. c一般的なheapsort
- 10. 一般的な境界
- 11. カスタマーインボイスフォーム。一般的なリスト。 C#
- 12. 一般的なC#question
- 13. 一般的なJava Web App
- 14. 一般的な遅れが
- 15. java SSLHandshakeException一般的なSSLEngine
- 16. スウィフト一般的な問題
- 17. Linq一般的なメソッド
- 18. 一般的なC++アーキテクチャ
- 19. 一般的なエラーは+
- 20. 一般的な開発ノート
- 21. 一般的なリスト/ディクショナリ
- 22. 一般的なメモのスキーム
- 23. 一般的な石鹸クライアントツール
- 24. 一般的なGuiceのパフォーマンスガイドライン
- 25. デバイスの一般的なメディアクエリ
- 26. rsync一般的な質問
- 27. VB.Net一般的な制限
- 28. CSS - 一般的なクラス
- 29. 一般的なファイルエクスプローラのインテントフィルタ
- 30. セミアドホックレポートの一般的なインターフェイス