3

我已经成功地使用Plack + Starman在我的开发机器上为我的 Catalyst 应用程序提供服务,使用的是我在 Dave Rolsky 的 Silki 发行版中找到的守护程序脚本

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

有人能帮我吗?

4

3 回答 3

5

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

你有几个基本的选择:

  1. 替换Catalyst::LogCatalyst::Log::Log4perl 之类的东西,或者只是 with overridden 的子类Catalyst::Log——_send_to_log其中任何一个都允许您将日志记录输出发送到 STDERR 以外的其他地方。

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

  3. 改用 FastCGI,您将获得一个错误流,将日志输出发送回网络服务器。您仍然可以通过Plack::Handler::FCGI / Plack::Handler::FCGI::Engine使用 Plack (我推荐后者,因为 FCGI::Engine 代码比 FCGI.pm 更新和更好)。

于 2010-09-15T19:43:11.293 回答
3

我意识到自从提出这个问题以来已经有很长时间了,但我刚刚遇到了同样的问题......

你实际上比霍布斯提到的多一种选择。

将 STDERR 发送到 /dev/null 的并不是“初始化脚本”,而是 Starman。

如果你查看 Starman 的源代码,你会发现,如果你给它--background标志,它使用MooseX::Daemonize::Core.

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

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

于 2014-10-14T16:50:08.687 回答
0

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

请参阅以下文档starman

--错误日志

指定应写入错误日志的文件的路径名。这使您在使用--daemonize.

于 2018-04-13T21:02:15.867 回答