2011-12-06 10 views
3

我正在使用Log :: Dispatch來處理消息到一個或多個輸出。在一種情況下,我設置了一個守護進程,記錄到一個文件中,但是如果它使用第三方模塊寫入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' –

相關問題