我在哪里可以使用Nginx,Starman,Plack和Catalyst找到应用程序运行时错误?

时间:2010-09-15 16:59:21

标签: perl nginx catalyst starman plack

我使用Plack + Starman成功管理我的开发计算机上的Catalyst应用程序,使用守护程序脚本我基于Dave Rolsky的Silki发行版中找到的守护程序脚本。 / p>

然后我设置了nginx来反向代理到我的Starman服务器,并将静态目录别名为nginx服务。到现在为止还挺好。但是,我不知道我的应用程序STDERR应该登录到哪里。它没有达到nginx(我认为这是有道理的)但我找不到很多关于Starman可能记录它的文档 - 如果有的话。我确实看过普拉克的中间件模块,但只看到了访问日志的选项。

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

它无处可去。 Catalyst::Log正在向STDERR发送数据,初始脚本正在向STDERR发送/dev/null

您有几个基本选择:

  1. Catalyst::Log替换为Catalyst::Log::Log4perl或仅使用Catalyst::Log的子类替换_send_to_log - 任何一个都允许您在某处发送日志记录输出除了STDERR。

  2. 编写一些在PSGI级别运行的代码来管理日志文件并重新打开STDERR。我试过这个,这不是很愉快。日志文件比它们看起来更难。

  3. 改为使用FastCGI,您将拥有一个将日志输出发送回Web服务器的错误流。您仍然可以通过Plack::Handler::FCGI / Plack::Handler::FCGI::Engine使用Plack(我建议使用后者,因为FCGI :: Engine代码比FCGI.pm更新更好)。

答案 1 :(得分:3)

我意识到问题被问到已经很长时间了,但是我遇到了同样的问题......

你实际上还有一个比Hobbs提到的更多的选择。

将STDERR发送到/ dev / null并不是“init脚本”,它是Starman。

如果您查看Starman的源代码,您会发现,如果您为其提供--background标记,则会使用MooseX::Daemonize::Core

一旦你知道,它的文档将告诉你它故意关闭STDERR,STDOUT和STDIN并将它们重定向到/ dev / null,并且它将环境变量MX_DAEMON_STDERR和MX_DAEMON_STDOUT作为要使用的文件的名称代替。

因此,如果您将MX_DAEMON_STDERR设置为文件名启动催化剂服务器,则STDERR将转到该文件。

答案 2 :(得分:0)

今天Starman有一个--error-log命令行选项,允许您将错误消息重定向到文件。

请参阅documentation of starman

  

<强> - 错误日志

     

指定应写入错误日志的文件的路径名。这使您在使用--daemonize时仍然可以访问错误。