###実現したいこと
現在とある処理を複数のスレッドを使って並列に処理を行なっているのですが、
並列に処理している為にログデータがばらばらに出力されてしまいます。
並列処理を行いつつ、ログは整形する方法について良い方法がないでしょうか?
###前提条件
・言語はperlを使用している
・実際に処理を行い、ログを出力する部分の担当ではないため、ソースコードを直接変更することができない(処理関数の中身は変更できない)
###ソース構成
--並列処理開始-- 処理A 処理B --並列処理終了--
###現在の出力内容
処理Aのログ1 処理Bのログ1 処理Aのログ2 処理Aのログ3 処理Bのログ2 処理Aのログ4 処理Bのログ3 処理Bのログ4 ・ ・
###理想の出力内容
処理Aのログ1 処理Aのログ2 処理Aのログ3 処理Aのログ4 ・ ・ 処理Aのログ1 処理Aのログ2 処理Aのログ3 処理Aのログ4 ・ ・
よろしくお願いします。
ログの出力結果には、どのプロセス由来の出力かを識別できる情報が含まれていますか?
出力結果が行の途中で混ざってしまうことは無いのですか?
並列処理って、具体的にどのように実現されているのですか?つまり並列になったプロセスとログ出力処理の関係を知りたいです。
* Perlはどこで、どのように使用しているのでしょうか。
* 質問者さん自身は、出力されたログにどういった形でアクセスできるのでしょうか。たとえば▽ログを保存するログサーバの管理権限がある、▽ログサーバソフトウェア (syslogdやsyslog-ngなど) の設定変更・再起動ができる、▽保存されたログファイルの内容を読めるだけ、などが考えられます。
直接出力するログ自体には手を加えない方がよいですね。それはそれで残しておいた方いいです。何らかのタイミングで、そのログファイルを読み取りで開き、スレッド専用のログファイルに分割して書き込む方法はどうでしょうか?元のログファイルにどのスレッドからの出力か判別できる記述が必要ですが。