代码之家  ›  专栏  ›  技术社区  ›  cubabit

在哪里可以使用nginx、starman、plack和catalyst查找应用程序运行时错误?

  •  3
  • cubabit  · 技术社区  · 15 年前

    我已经成功地在我的开发机器上使用 Plack + Starman ,使用基于Dave Rolsky的一个守护进程脚本 Silki 分发。

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

    有人能帮我吗?

    3 回复  |  直到 15 年前
        1
  •  5
  •   hobbs    15 年前

    哪儿也去不了。 Catalyst::Log 正在将数据发送到 STDERR ,并且init脚本正在发送 斯代尔 /dev/null .

    您有几个基本选择:

    1. 更换 Catalyst::日志 有点像 Catalyst::Log::Log4perl 或者只是 Catalyst::日志 已重写 _send_to_log --任何一个都允许您将日志输出发送到stderr以外的其他地方。

    2. 编写一些在psgi级别运行的代码来管理日志文件,然后重新打开stderr。我试过了,不太舒服。日志文件比它们看起来更难。

    3. 相反,使用fastcgi,将有一个错误流将日志输出发送回Web服务器。你仍然可以使用plack via Plack::Handler::FCGI / Plack::Handler::FCGI::Engine (我建议使用后者,因为fcgi::engine代码比fcgi.pm更新得多,而且更好)。

        2
  •  3
  •   Robert Inder    11 年前

    我知道问这个问题已经很久了,但我还是碰到了同样的问题…

    你实际上比霍布斯提到的还有一个选择。

    把stderr发送到/dev/null的“init script”并不完全正确,它是starman。

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

    一旦你知道了这一点,它的文档会告诉你它故意关闭stderr、stdout和stdin,并将它们重新定向到/dev/null,它将环境变量mx_daemon_stderr和mx_daemon_stdout作为要使用的文件名。

    因此,如果启动Catalyst服务器时MX_守护程序_stderr设置为文件名,则stderr将转到该文件。

        3
  •  0
  •   Daniel Böhmer Ali Shaukat    8 年前

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

    documentation of starman :

    --错误日志

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