如何使用$SESSION值将Apache 2.4错误日志拆分为单独的日志?

如何使用$SESSION值将Apache 2.4错误日志拆分为单独的日志?,apache,perl,session,cgi,error-log,Apache,Perl,Session,Cgi,Error Log,我们的web应用程序使用CGI::Application::Plugin::session模块存储一个会话值来指示客户端的位置。此值不是url的一部分,我们不需要或不希望为每个位置使用虚拟主机。我想让Apache实时将错误日志拆分为单独的“位置”日志,而不是使用或创建后处理解析器。我认为可以通过管道将日志记录到外部程序来处理拆分,使用下面的语法,但我不确定如何在运行时通过该外部程序访问会话位置值: ErrorLog "|/usr/local/etc/apache24/some_program.p

我们的web应用程序使用CGI::Application::Plugin::session模块存储一个会话值来指示客户端的位置。此值不是url的一部分,我们不需要或不希望为每个位置使用虚拟主机。我想让Apache实时将错误日志拆分为单独的“位置”日志,而不是使用或创建后处理解析器。我认为可以通过管道将日志记录到外部程序来处理拆分,使用下面的语法,但我不确定如何在运行时通过该外部程序访问会话位置值:

ErrorLog "|/usr/local/etc/apache24/some_program.pl"

这可能吗?

是的,这是可能的。我们使用以下配置从apache日志中过滤掉一些噪音:

ErrorLog    "|/etc/httpd/conf/apache_log_handler.pl >> /service/httpd-err/s"
我们的定制
apache\u log\u handler.pl
如下所示:

#!/usr/bin/perl
$|=1;
my $warning_message_to_drop_reg = qr/constant subroutine.+redefined|prototype mismatch|^\s+at\s+\/\w+/i;

while (<STDIN>) {
    my $message = $_;
    next if ($message =~ /$warnings_message_to_drop_reg/);

    # You should add custom code here, to write to other locations, if desired
    # If you log your session id, you can grab it here to decide what to do.

    print $message; # Goes to normal apache error log

}
#/usr/bin/perl
$|=1;
我的$warning\u message\u to\u drop\u reg=qr/常量子例程。+重新定义|原型不匹配| ^\s+at\s+\/\w+/i;
而(){
我的$message=$\;
下一个if($message=~/$warnings\u message\u to\u drop\u reg/);
#如果需要,您应该在此处添加自定义代码以写入其他位置
#如果您记录了会话id,您可以在这里获取它来决定要做什么。
打印$message;#转到正常的apache错误日志
}

您正在筛选的消息不会包含我需要的会话值。它在会话本身,而不是stdin中。此外,我不想将数据添加到stdin流(比如位置)。我只是想知道是否有办法访问正在生成流的会话。有关如何将会话id添加到apache日志,请参阅。您可以在apache logger中处理此问题,也可以在处理请求的代码中处理此问题(并省略日志消息)。