middlewares/access-log

生成访问日志的中件间

v2.1.2 2022-05-17 17:43 UTC

This package is auto-updated.

Last update: 2024-09-17 22:39:46 UTC


README

Latest Version on Packagist Software License Testing Total Downloads

使用Apache的访问日志格式(Apache's access log format)为每个请求生成访问日志。此中件间需要Psr log implementation,例如monolog

需求

  • PHP >= 7.2
  • PSR-7 http 库
  • PSR-15 中件间调度器
  • PSR-3 logger

安装

此包可以通过Composer安装和自动加载,作为middlewares/access-log

composer require middlewares/access-log

示例

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

//Create the logger
$logger = new Logger('access');
$logger->pushHandler(new StreamHandler(fopen('/access-log.txt', 'r+')));

$dispatcher = new Dispatcher([
    new Middlewares\AccessLog($logger)
]);

$response = $dispatcher->dispatch(new ServerRequest());

用法

此中件间使用PSR-3 日志标准来存储日志,因此需要将Psr\Log\LoggerInterface实例传递给构造函数。

格式

此选项允许定义用于保存日志消息的格式。您可以创建自己的格式(更多关于可用选项的信息),或者使用以下预定义格式之一

  • AccessLog::FORMAT_COMMON(默认使用)
  • AccessLog::FORMAT_COMMON_VHOST
  • AccessLog::FORMAT_COMBINED
  • AccessLog::FORMAT_REFERER
  • AccessLog::FORMAT_AGENT
  • AccessLog::FORMAT_VHOST
  • AccessLog::FORMAT_COMMON_DEBIAN
  • AccessLog::FORMAT_COMBINED_DEBIAN
  • AccessLog::FORMAT_VHOST_COMBINED_DEBIAN
use Middlewares\AccessLog;

$format = AccessLog::FORMAT_COMMON_VHOST;

$accessLog = (new AccessLog($logger))->format($format);

ipAttribute

默认使用REMOTE_ADDR服务器参数获取客户端IP。此选项允许使用请求属性。与任何IP检测中件间结合使用很有用,例如client-ip

Dispatcher::run([
    //detect the client ip and save it in "ip" attribute
    (new Middlewares\ClientIP())->attribute('ip'),

    //use that attribute
    (new Middlewares\AccessLog($logger))->ipAttribute('ip')
]);

hostnameLookups

启用hostnameLookups标志以获取远程主机名(%h)。默认为false

上下文

默认情况下,没有上下文传递给日志记录器。当设置此上下文调用时,它将在每次请求日志记录时被调用,同时传递请求和响应。这允许您将上下文设置为日志条目

$dispatcher = new Dispatcher([
    //detect the client ip and save it in ip attribute
    (new Middlewares\ClientIP())->attribute('ip'),
    
    // Add UUID for the request so we can trace logs later in case somethings goes wrong
    new Middlewares\Uuid(),

    // Use the data from the other two middleware and use it as context for logging
    (new Middlewares\AccessLog($logger))
        ->context(function (ServerRequestInterface $request, ResponseInterface $response) {
            return [
                'request-id' => $request->getHeaderLine('X-Uuid'),
                'client-ip' => $request->getAttribute('ip'),
            ];
        })
]);

自定义格式字符串

格式字符串试图模仿Apache Httpd服务器文档中描述的指令。

自定义格式可以通过在格式字符串中放置 "%" 指令来定义,这些指令在日志文件中由以下值替换

以下Apache Httpd服务器指令在此中件间中没有实现

有关最近更改的更多信息,请参阅CHANGELOG,有关贡献细节,请参阅CONTRIBUTING

MIT许可证(MIT)。有关更多信息,请参阅LICENSE