Skip to content

Commit 6937657

Browse files
authored
Merge pull request #5 from php-api-clients/log-url
Log the URL we send a request to
2 parents bbeb53e + 48641d6 commit 6937657

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

src/LoggerMiddleware.php

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use ApiClients\Foundation\Middleware\MiddlewareInterface;
77
use Psr\Http\Message\RequestInterface;
88
use Psr\Http\Message\ResponseInterface;
9+
use Psr\Http\Message\UriInterface;
910
use Psr\Log\LoggerInterface;
1011
use React\Promise\CancellablePromiseInterface;
1112
use Throwable;
@@ -14,9 +15,9 @@
1415

1516
class LoggerMiddleware implements MiddlewareInterface
1617
{
17-
const REQUEST = 'request';
18-
const RESPONSE = 'response';
19-
const ERROR = 'error';
18+
private const REQUEST = 'request';
19+
private const RESPONSE = 'response';
20+
private const ERROR = 'error';
2021

2122
/**
2223
* @var LoggerInterface
@@ -43,7 +44,10 @@ public function pre(
4344
}
4445

4546
$this->context[$transactionId][self::REQUEST]['method'] = $request->getMethod();
46-
$this->context[$transactionId][self::REQUEST]['uri'] = (string)$request->getUri();
47+
$this->context[$transactionId][self::REQUEST]['uri'] = (string)$this->stripQueryItems(
48+
$request->getUri(),
49+
$options
50+
);
4751
$this->context[$transactionId][self::REQUEST]['protocol_version'] = (string)$request->getProtocolVersion();
4852
$ignoreHeaders = $options[self::class][Options::IGNORE_HEADERS] ?? [];
4953
$this->context[$transactionId] = $this->iterateHeaders(
@@ -53,6 +57,13 @@ public function pre(
5357
$ignoreHeaders
5458
);
5559

60+
if (!isset($options[self::class][Options::URL_LEVEL])) {
61+
return resolve($request);
62+
}
63+
64+
$message = 'Requesting: ' . $this->context[$transactionId][self::REQUEST]['uri'];
65+
$this->logger->log($options[self::class][Options::URL_LEVEL], $message, $this->context[$transactionId]);
66+
5667
return resolve($request);
5768
}
5869

@@ -164,4 +175,14 @@ private function addResponseToContext(
164175

165176
return $context;
166177
}
178+
179+
private function stripQueryItems(UriInterface $uri, array $options): UriInterface
180+
{
181+
parse_str($uri->getQuery(), $query);
182+
foreach ($options[self::class][Options::IGNORE_URI_QUERY_ITEMS] ?? [] as $item) {
183+
unset($query[$item], $query[$item . '[]']);
184+
}
185+
186+
return $uri->withQuery(http_build_query($query));
187+
}
167188
}

src/Options.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
final class Options
66
{
7-
const IGNORE_HEADERS = 'ignore_headers';
8-
const LEVEL = 'level';
9-
const ERROR_LEVEL = 'error_level';
7+
public const IGNORE_HEADERS = 'ignore_headers';
8+
public const IGNORE_URI_QUERY_ITEMS = 'ignoreuri_query_items';
9+
public const LEVEL = 'level';
10+
public const ERROR_LEVEL = 'error_level';
11+
public const URL_LEVEL = 'url_level';
1012
}

tests/LoggerMiddlewareTest.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,19 @@ public function testLog()
5050
LoggerMiddleware::class => [
5151
Options::LEVEL => LogLevel::DEBUG,
5252
Options::ERROR_LEVEL => LogLevel::ERROR,
53+
Options::URL_LEVEL => LogLevel::DEBUG,
5354
Options::IGNORE_HEADERS => [
5455
'X-Ignore-Request',
5556
'X-Ignore-Response',
5657
],
58+
Options::IGNORE_URI_QUERY_ITEMS => [
59+
'strip_this_item',
60+
],
5761
],
5862
];
5963
$request = new Request(
6064
'GET',
61-
'https://example.com/',
65+
'https://example.com/?strip_this_item=0&dont_strip_this_item=1',
6266
[
6367
'X-Foo' => 'bar',
6468
'X-Ignore-Request' => 'nope',
@@ -76,13 +80,28 @@ public function testLog()
7680
);
7781

7882
$logger = $this->prophesize(LoggerInterface::class);
83+
$logger->log(
84+
LogLevel::DEBUG,
85+
'Requesting: https://example.com/?dont_strip_this_item=1',
86+
[
87+
'request' => [
88+
'method' => 'GET',
89+
'uri' => 'https://example.com/?dont_strip_this_item=1',
90+
'protocol_version' => '1.1',
91+
'headers' => [
92+
'Host' => ['example.com'],
93+
'X-Foo' => ['bar'],
94+
],
95+
],
96+
]
97+
)->shouldBeCalled();
7998
$logger->log(
8099
LogLevel::DEBUG,
81100
'Request abc completed.',
82101
[
83102
'request' => [
84103
'method' => 'GET',
85-
'uri' => 'https://example.com/',
104+
'uri' => 'https://example.com/?dont_strip_this_item=1',
86105
'protocol_version' => '1.1',
87106
'headers' => [
88107
'Host' => ['example.com'],

0 commit comments

Comments
 (0)