Skip to content

Commit 9c0f980

Browse files
authored
Merge pull request #6 from php-api-clients/configurable-messages
Configurable log messages
2 parents 6937657 + 98a8ae1 commit 9c0f980

File tree

5 files changed

+279
-25
lines changed

5 files changed

+279
-25
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"require": {
1212
"php": "^7.2",
1313
"api-clients/middleware": "^4.0",
14-
"psr/log": "^1.0"
14+
"psr/log": "^1.0",
15+
"wyrihaximus/string-get-in": "^1.0"
1516
},
1617
"require-dev": {
1718
"api-clients/test-utilities": "^5.1.0",

composer.lock

Lines changed: 86 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/LoggerMiddleware.php

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,17 @@
1212
use Throwable;
1313
use function React\Promise\reject;
1414
use function React\Promise\resolve;
15+
use function WyriHaximus\getIn;
1516

1617
class LoggerMiddleware implements MiddlewareInterface
1718
{
18-
private const REQUEST = 'request';
19-
private const RESPONSE = 'response';
20-
private const ERROR = 'error';
19+
private const REQUEST = 'request';
20+
private const RESPONSE = 'response';
21+
private const ERROR = 'error';
22+
23+
private const MESSAGE_URL = '[{{transaction_id}}] Requesting: {{request.uri}}';
24+
private const MESSAGE_SUCCESSFUL = '[{{transaction_id}}] Request completed with {{response.status_code}}';
25+
private const MESSAGE_ERROR = '[{{transaction_id}}] {{error.message}}';
2126

2227
/**
2328
* @var LoggerInterface
@@ -43,6 +48,10 @@ public function pre(
4348
return resolve($request);
4449
}
4550

51+
$this->context[$transactionId] = [
52+
'transaction_id' => $transactionId,
53+
self::REQUEST => [],
54+
];
4655
$this->context[$transactionId][self::REQUEST]['method'] = $request->getMethod();
4756
$this->context[$transactionId][self::REQUEST]['uri'] = (string)$this->stripQueryItems(
4857
$request->getUri(),
@@ -61,7 +70,10 @@ public function pre(
6170
return resolve($request);
6271
}
6372

64-
$message = 'Requesting: ' . $this->context[$transactionId][self::REQUEST]['uri'];
73+
$message = $this->renderTemplate(
74+
$options[self::class][Options::MESSAGE_PRE] ?? self::MESSAGE_URL,
75+
$this->context[$transactionId]
76+
);
6577
$this->logger->log($options[self::class][Options::URL_LEVEL], $message, $this->context[$transactionId]);
6678

6779
return resolve($request);
@@ -88,10 +100,11 @@ public function post(
88100
return resolve($response);
89101
}
90102

91-
$message = 'Request ' . $transactionId . ' completed.';
92-
93103
$context = $this->addResponseToContext($context, $response, $options);
94-
104+
$message = $this->renderTemplate(
105+
$options[self::class][Options::MESSAGE_POST] ?? self::MESSAGE_SUCCESSFUL,
106+
$context
107+
);
95108
$this->logger->log($options[self::class][Options::LEVEL], $message, $context);
96109

97110
return resolve($response);
@@ -116,8 +129,6 @@ public function error(
116129
return reject($throwable);
117130
}
118131

119-
$message = $throwable->getMessage();
120-
121132
$response = null;
122133
if (method_exists($throwable, 'getResponse')) {
123134
$response = $throwable->getResponse();
@@ -126,6 +137,7 @@ public function error(
126137
$context = $this->addResponseToContext($context, $response, $options);
127138
}
128139

140+
$context[self::ERROR]['message'] = $throwable->getMessage();
129141
$context[self::ERROR]['code'] = $throwable->getCode();
130142
$context[self::ERROR]['file'] = $throwable->getFile();
131143
$context[self::ERROR]['line'] = $throwable->getLine();
@@ -135,6 +147,10 @@ public function error(
135147
$context[self::ERROR]['context'] = $throwable->getContext();
136148
}
137149

150+
$message = $this->renderTemplate(
151+
$options[self::class][Options::MESSAGE_ERROR] ?? self::MESSAGE_ERROR,
152+
$context
153+
);
138154
$this->logger->log($options[self::class][Options::ERROR_LEVEL], $message, $context);
139155

140156
return reject($throwable);
@@ -185,4 +201,16 @@ private function stripQueryItems(UriInterface $uri, array $options): UriInterfac
185201

186202
return $uri->withQuery(http_build_query($query));
187203
}
204+
205+
private function renderTemplate(string $template, array $context): string
206+
{
207+
$keyValues = [];
208+
preg_match_all("|\{\{(.*)\}\}|U", $template, $out, PREG_PATTERN_ORDER);
209+
foreach (array_unique(array_values($out[1])) as $placeHolder) {
210+
$keyValues['{{' . $placeHolder . '}}'] = getIn($context, $placeHolder, '');
211+
}
212+
$template = str_replace(array_keys($keyValues), array_values($keyValues), $template);
213+
214+
return $template;
215+
}
188216
}

src/Options.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@ final class Options
99
public const LEVEL = 'level';
1010
public const ERROR_LEVEL = 'error_level';
1111
public const URL_LEVEL = 'url_level';
12+
public const MESSAGE_PRE = 'message_pre';
13+
public const MESSAGE_POST = 'message_post';
14+
public const MESSAGE_ERROR = 'message_error';
1215
}

0 commit comments

Comments
 (0)