【问题标题】:Mojolicious source IP and user agentMojolicious 源 IP 和用户代理
【发布时间】:2021-08-07 22:59:37
【问题描述】:

我有以下 Mojolicious 应用程序,它从特定文件夹提供文件

use Mojolicious::Lite;
use Mojo::Log;

my $app = app;
my $static = $app->static;
push @{$static->paths} => 'c:\test';

$app->start

当我跑步时:

perl mojo_server.pl daemon -m development

我明白了:

[2021-05-18 19:46:39.22370] [29388] [info] Listening at "http://*:3000"
Server available at http://127.0.0.1:3000

当我从 Web 浏览器访问文件时,我可以访问该文件,但在“服务器位于 http://127.0.0.1:3000" 之后没有关于 STDERR 的信息 比如源地址和请求的页面以及用户代理是什么。如果可能的话,我怎样才能变得 mojolicious 以在调试模式下显示这些信息?

【问题讨论】:

  • 您可能对metacpan.org/pod/App::HTTPThis感兴趣。
  • 感谢您的建议,但我仅限于使用 Mojolicious,因为这个原型在未来我将更改逻辑而不是访问文件夹中的文件。
  • 通常您在访问日志中查找请求信息,但您必须让您的应用程序将该信息写入此类文件。
  • @briandfoy 我同意你的观点,通常网络服务器有一个常见的格式,比如 NCSA en.wikipedia.org/wiki/Common_Log_Format,我想也许有可能使用 Mojolicious 启用这种格式,使用一些调试标志到 STDERR查看这些信息,但从下面的答案中我注意到开发人员应该在每种情况下处理日志并且没有默认格式。
  • @dave 我认为您的问题是专门关于提供静态文件的。查看AccessLog 以获得更通用的解决方案。 (更新答案)

标签: perl mojolicious


【解决方案1】:

您可以在Mojolicious 中使用HOOKS 中的after_static

use Mojolicious::Lite -signatures;
use Mojo::Log;

my $log = Mojo::Log->new;

hook after_static => sub ($c){
    $log->debug('original_remote_address : ' => $c->tx->original_remote_address);
    $log->debug('user_agent : ' => $c->tx->req->content->headers->user_agent );
    $log->debug('url : ' => $c->tx->req->url->to_abs);
};
app->start;

after_static 事件在生成静态响应时触发。

更新:如果您需要更通用的解决方案,而不是专门针对静态文件提供服务,请查看AccessLog 插件。

use Mojolicious::Lite -signatures;
use Mojo::Log;
use Mojolicious::Plugin::AccessLog;

my $log = Mojo::Log->new;
plugin 'AccessLog';
app->start;

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2013-04-27
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多