PSGI日志记录(Perl)

Mad*_*ker 8 perl logging psgi

尽管文档相当少且不清楚,并且对于初学者来说是有效的方法,但我已经逐渐喜欢PSGI,并且我目前正在其中一个应用程序中使用它.我想知道的是如何在多节点应用程序中管理日志记录?有关登录PSGI的"最佳实践"是什么?

Mar*_*erg 5

我建议使用Plack :: Middleware :: AccessLog进行日志访问,使用Plack :: Middleware :: LogDispatch进行自定义日志记录.它们又使用流行的Log :: Dispatch模块.

LogDispatch Middleware文档目前不会向您显示如何在设置日志对象后使用它.这是一个例子:

my $app = sub {
    my $env = shift;
    $env->{'psgix.logger'}->({ level => "debug", message => "This is debug" });
    return [ 200, [], [] ];
};
Run Code Online (Sandbox Code Playgroud)

为了解决多节点问题,您可以使用Log :: Dispatch :: Syslog将日志发送到rsyslog,而rsyslog又可以将日志数据传递到另一个rsyslog服务器.这样,所有节点都可以登录到单个中央日志服务器.

借助Log :: Dispatch的灵活性,您还可以选择本地和远程登录以获得冗余.发送到中央服务器的日志可以被认为是主要的,并且在中央日志服务器停机一点的情况下,本地完成的日志记录可以被视为备份.

使用中央日志服务器有几个优点:

  1. 您可以在一个位置"整理"整个群集中的日志.
  2. 使用一组日志文件,日志轮换和分析更简单.
  3. 您可以更好地上下调整集群,因为您可以关闭节点而不必担心丢失日志记录,或者保持服务器正常运行以便夜间cron作业可以触发来处理日志.

我目前一起使用Log :: Dispach和Rsyslog来自行管理多节点集群.