有没有办法将打印重定向到STDERR,以便它们转到Log :: Dispatch?

时间:2011-12-06 00:03:01

标签: perl

我正在使用Log :: Dispatch处理一个或多个输出的消息传递。在一种情况下,我设置了一个记录到文件的守护进程,但如果它使用的第三方模块写入STDERR,那么我在日志中看不到。我希望能够将任何写入STDERR的内容重定向到Log :: Dispatch。这可能吗?

1 个答案:

答案 0 :(得分: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