我使用Plack + Starman成功管理我的开发计算机上的Catalyst应用程序,使用守护程序脚本我基于Dave Rolsky的Silki发行版中找到的守护程序脚本。 / p>
然后我设置了nginx来反向代理到我的Starman服务器,并将静态目录别名为nginx服务。到现在为止还挺好。但是,我不知道我的应用程序STDERR应该登录到哪里。它没有达到nginx(我认为这是有道理的)但我找不到很多关于Starman可能记录它的文档 - 如果有的话。我确实看过普拉克的中间件模块,但只看到了访问日志的选项。
有人可以帮助我吗?
答案 0 :(得分:5)
它无处可去。 Catalyst::Log
正在向STDERR
发送数据,初始脚本正在向STDERR
发送/dev/null
。
您有几个基本选择:
将Catalyst::Log
替换为Catalyst::Log::Log4perl或仅使用Catalyst::Log
的子类替换_send_to_log
- 任何一个都允许您在某处发送日志记录输出除了STDERR。
编写一些在PSGI级别运行的代码来管理日志文件并重新打开STDERR。我试过这个,这不是很愉快。日志文件比它们看起来更难。
改为使用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
命令行选项,允许您将错误消息重定向到文件。
<强> - 错误日志强>
指定应写入错误日志的文件的路径名。这使您在使用
--daemonize
时仍然可以访问错误。