掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ログ出力について (ID:72952)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
目的によっても解決策が異なりそうなのでいくつか提案します。 また、ログ出力オブジェクトはプロセスの開始から終了まで、 対象のログファイルを開いたままにしていると仮定して回答します。 1. 同じログファイルに書き込みを行うプロセスが複数存在する事は前提ですか? また、プロセスが複数存在する場合、どのような結果になるべきですか? ●通常、プロセスは1つしか存在せず、複数存在する時はログが壊れなければ良い →「CreateFile」WinAPIであればファイルを開く時にファイルの共有モードを指定できます。 ここで「共有を許可しない」ようにすればファイルを開くことができたプロセスしか書き込めません。 後発のプロセスのログは保存できなくなりますが、ファイルは壊れません。 ●プロセスは複数存在する可能性があり、一つのログファイルに保存しなければならない →ログファイルに書き込む専用のプロセスを起動する、 あるいは起動しているプロセスの一つにその役割を任命し、 全てのログはそのプロセスを介して書き込むようにします。 「プロセス間通信」について調べてみるといいでしょう。 多分、それなりに面倒です。 ●プロセスは複数存在する可能性があり、別々のログファイルに保存しなければならない →「CreateFile」WinAPIで「共有を許可しない」でログファイルを開くようにします。 候補となるログファイル名でログファイルを開こうとしてみて、失敗したら次の名前を試します。 この手法ではログファイルを書き込もうとしているパスが無効、またはディスク容量がない場合などに 永久に失敗するパターンが発生する可能性があるので、試す数に上限を設けたり、 Mutexなどを使って他に干渉するプロセスが起動しているかチェックできる機構を備えるべきでしょう。 2. ログファイルへの書き込み状態を記録したインデックスファイルのようなものを別に用意し、 そのファイルに「次に書き込むべきファイル」などの情報を残しておくのが簡単かと思います。 複数プロセスが起動した場合に備えるなら、 意図的にこのインデックスファイルを「共有を許可しない」で開きっぱなしにしておき、 後発のプロセスがインデックスファイルにアクセスできないようにするという手もありだと思います。 別のファイルを用意したくなければ各ログファイルの更新日時を使うという手もありそうですが、 この方法だと複数プロセスへの対応や無関係の方法で更新日時が変化した時に弱そうです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.