2010-12-29 7 views
5

私は非同期TCPサーバー(特にMUDサーバー)を作成するために素晴らしいAnyEventを使用しています。PerlのAnyEventで使用するロギングモジュールはどれですか?

ブロック/同期コードの数を少なくして、すべてをスムーズに動かすために、使用していた一部のモジュール、たとえばAnyEvent::MemcachedAnyEvent::Gearmanを置き換えました。これにより、メインプログラムが非常に迅速になることが可能になり、望ましいことである。私は同期のためにこれらの呼び出しのいくつかの必要性をコード化しました。

私が現在持っている1つの問題と、この質問の焦点はロギングです。

このサーバープログラムのAnyEventを使用する前に、どのモジュールまたはサブルーチンをどのレベルでどのログ出力(画面、ファイルなど)を微調整するかを微調整できるように、Log::Log4perlを使用していました。

ここでの問題は、Log4perlのアクション(警告、情報など)が現在同期的に実行されていることですが、ログ行が最終的に画面/ファイル(および正しい順序) )。

AnyEventなどの非同期イベントハンドラを使用する場合、Log :: Log4perlは正しい選択ですか、別のモジュールを参照する必要がありますか?もしそうなら、これはお勧めですか?

答えて

2

AnyEventに付属するAnyEvent :: Logは、AnyEvent :: IOを使用します。AnyEvent :: IOは、IO :: AIOが使用可能なときに(非同期でも同期しても)ファイルに非同期で追加されます。

2

避けようとしていることはありますか?それが同期ファイルIO(ログファイル/ stdoutなどへの書き込み)であれば、コード内のLog4perlのすべての使用を置き換えるのではなく、おそらく非同期および/またはバッファリングアペンダを使用して問題を解決できます。

Log::Log4perl::Appender::Bufferこれは良いスタートかもしれないようですが、完全に非同期のアペンダーはもう存在しないようです。

+0

非同期アペンダーが存在していないことを明確にしてくれてありがとう – mfontani

関連する問題