2011-12-06 6 views
3

Log :: Dispatchを使用して、1つ以上の出力へのメッセージングを処理しています。あるケースでは、ファイルにログするデーモンをセットアップしましたが、第三者のモジュールがSTDERRに書き込みを行った場合、ログには表示されません。 STDERRに書かれたものをLog :: Dispatchにリダイレクトさせることができるようにしたいと思います。これは可能ですか?プリントをSTDERRにリダイレクトして、Log :: Dispatch?

+0

このモジュールは 'warn'を使用していますか、' STDERR'ハンドルに直接書き込んでいますか? – cjm

+0

これはSTDERRに直接書き込みます。つまり、 'print STDERR'です。 – nnutter

答えて

5

tieあなたが望むことは何でもできます。 perltieを参照してください:

{ 
    package StderrToLogDispatch; 
    sub TIEHANDLE { 
     my ($pkg) = @_; 
     return bless {}, $pkg; 
    } 
    sub PRINT { 
     my @msg = @_; 
     chomp $msg[-1]; 
     # I don't use Log::Dispatch, so don't know if this is even close 
     Log::Dispatch->logToFile(@msg); 
    } 
} 

tie *STDERR, 'StderrToLogDispatch'; 
print STDERR 'foo'; # invokes StderrToLogDispatch->PRINT 
+0

ありがとうございます。これはうまくいった。 – nnutter

+0

実際には状態を保持していないので、 'bless \ do {0}、$ pkg' –

関連する問題