middlewares / access-log
生成访问日志的中件间
v2.1.2
2022-05-17 17:43 UTC
Requires
- php: ^7.2 || ^8.0
- psr/http-server-middleware: ^1.0
- psr/log-implementation: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- laminas/laminas-diactoros: ^2.3
- middlewares/utils: ^3.0
- monolog/monolog: ^2.0
- oscarotero/php-cs-fixer-config: ^1.0
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^8|^9
- squizlabs/php_codesniffer: ^3.0
README
使用Apache的访问日志格式(Apache's access log format)为每个请求生成访问日志。此中件间需要Psr log implementation,例如monolog。
需求
安装
此包可以通过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。