mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 00:12:30 -05:00
Interpolate the log message also for logged exceptions
According to PSR-3 the log message can have placeholders that are replaced from the context object. Our logger implementation did that for all PSR-3 logger methods. The only exception was our custom `logException`. Since PsrLoggerAdapter calls logException when an exception key is present in the context object, log messages were no longer interpolated. Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
This commit is contained in:
parent
541751d42a
commit
311b3ffa2e
1 changed files with 19 additions and 8 deletions
|
|
@ -43,6 +43,7 @@ use OCP\ILogger;
|
|||
use OCP\Log\IFileBased;
|
||||
use OCP\Log\IWriter;
|
||||
use OCP\Support\CrashReport\IRegistry;
|
||||
use function strtr;
|
||||
|
||||
/**
|
||||
* logging utilities
|
||||
|
|
@ -206,13 +207,7 @@ class Log implements ILogger, IDataLogger {
|
|||
array_walk($context, [$this->normalizer, 'format']);
|
||||
|
||||
$app = $context['app'] ?? 'no app in context';
|
||||
|
||||
// interpolate $message as defined in PSR-3
|
||||
$replace = [];
|
||||
foreach ($context as $key => $val) {
|
||||
$replace['{' . $key . '}'] = $val;
|
||||
}
|
||||
$message = strtr($message, $replace);
|
||||
$message = $this->interpolateMessage($context, $message);
|
||||
|
||||
try {
|
||||
if ($level >= $minLevel) {
|
||||
|
|
@ -315,7 +310,7 @@ class Log implements ILogger, IDataLogger {
|
|||
|
||||
$serializer = new ExceptionSerializer($this->config);
|
||||
$data = $serializer->serializeException($exception);
|
||||
$data['CustomMessage'] = $context['message'] ?? '--';
|
||||
$data['CustomMessage'] = $this->interpolateMessage($context, $context['message'] ?? '--');
|
||||
|
||||
$minLevel = $this->getLogLevel($context);
|
||||
|
||||
|
|
@ -376,4 +371,20 @@ class Log implements ILogger, IDataLogger {
|
|||
}
|
||||
throw new \RuntimeException('Log implementation has no path');
|
||||
}
|
||||
|
||||
/**
|
||||
* Interpolate $message as defined in PSR-3
|
||||
*
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function interpolateMessage(array $context, string $message): string {
|
||||
$replace = [];
|
||||
foreach ($context as $key => $val) {
|
||||
$replace['{' . $key . '}'] = $val;
|
||||
}
|
||||
return strtr($message, $replace);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue