2016-03-28 13 views
0

私はタスクを同時に実行するコードを書いており、各タスクは同時に実行できる多くのサブタスクにつながる可能性があります。ロギングのベストプラクティス(同時実行でのデバッグ)

私はGoでこれを行うのに十分なことを学んだし、強烈なテストでうまくいった。私たちは、実行されている作業に関する情報をログファイルに記録する習慣を持っています。しかし、生成されたログ(> 50MB)は、タスクが順番に実行される場合にのみ有効です。同時実行の場合、ログのコンテキスト(ログを書き込んだタスク)は維持されません。

私はこの問題に関連するトピックを検索しましたが、関連情報は見つかりませんでした。実行フローのデバッグに役立つログを作成するためのベストプラクティスとデザインについて学びたい。私はタスクとサブタスクツリーを介して実行の流れを知る必要があります。

私はGoで作業し、同時実行タスクを実行するためにgoroutinesを使用しました。言語がidを各ゴルーチンに関連して公開していないので、私たちはログ内のゴルーチンのidさえも関連付けることができませんでした(idを入手できます)。

答えて

1

作業を区別するためにログにスレッドIDを使用している場合、スレッドIDの実際の意味は、コンテキストごとのログをグループ化する以外は何もありません。 GoはゴルーチンIDを公開しないので、ロギングのためにあなたのゴルーチンに他の識別子を提供することをお勧めします。何が頭に浮かぶのはタスクIDか、そのゴルーチンでやっている実際の作業と相関するものです。それは実際には問題ではありませんが、仕事のその部分の文脈に固有のものでなければなりません。

+0

私はタスクt1にサブタスクst1、st2、st3を持っているとします。 t1はログをt1として書き込みます。私はこれをやります st1、st2、st3が起動しました。 st1はログをt1として書き込みますst1:これを実行しています st3はログをt1として書き込みますst3:これを実行します st2はログをt1として書き込みますst2:これを実行しています したがって、私はすべてのタスクログの書き込み中に使用されます(親階層のタスク情報が取得され、ログのテキストに追加されます)。 このアプローチは良いですか? – Spartan