From 63464834e1b0204bf8d064c98be399559fd2d87a Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 20 Jun 2024 11:16:32 +0300 Subject: [PATCH 1/4] Add `Message::category()` method --- CHANGELOG.md | 1 + src/Message.php | 11 +++++++++++ src/Message/Formatter.php | 4 +--- src/Target.php | 5 +---- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5fb3933..80bb408c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - Chg #109: Deprecate `Logger` methods `setTraceLevel()` and `setExcludedTracePaths()` in favor of context provider usage (@vjik) - New #111: Add `DateTime` and `DateTimeImmutable` support as time in log context (@vjik) +- New #112: Add `Message::category()` method (@vjik) ## 2.0.0 May 22, 2022 diff --git a/src/Message.php b/src/Message.php index 519aed24..ee0b16f9 100644 --- a/src/Message.php +++ b/src/Message.php @@ -4,10 +4,12 @@ namespace Yiisoft\Log; +use LogicException; use Psr\Log\InvalidArgumentException; use Psr\Log\LoggerTrait; use Psr\Log\LogLevel; use Stringable; +use Yiisoft\Log\Message\CategoryFilter; use Yiisoft\Log\Message\ContextValueExtractor; use Yiisoft\VarDumper\VarDumper; @@ -99,6 +101,15 @@ public function context(string $name = null, mixed $default = null): mixed return $this->context[$name] ?? $default; } + public function category(): string + { + $category = $this->context['category'] ?? CategoryFilter::DEFAULT; + if (!is_string($category)) { + throw new LogicException('Invalid category value in log context. Got "' . get_debug_type($category) . '".'); + } + return $category; + } + /** * Parses log message resolving placeholders in the form: "{foo}", * where foo will be replaced by the context data in key "foo". diff --git a/src/Message/Formatter.php b/src/Message/Formatter.php index f54685e7..da43c1ef 100644 --- a/src/Message/Formatter.php +++ b/src/Message/Formatter.php @@ -127,10 +127,8 @@ private function defaultFormat(Message $message, array $commonContext): string $time = $this->getTime($message); $prefix = $this->getPrefix($message, $commonContext); $context = $this->getContext($message, $commonContext); - /** @var string $category */ - $category = $message->context('category', CategoryFilter::DEFAULT); - return "{$time} {$prefix}[{$message->level()}][{$category}] {$message->message()}{$context}"; + return "{$time} {$prefix}[{$message->level()}][{$message->category()}] {$message->message()}{$context}"; } /** diff --git a/src/Target.php b/src/Target.php index 792caffc..d2cb7d72 100644 --- a/src/Target.php +++ b/src/Target.php @@ -384,10 +384,7 @@ private function filterMessages(array $messages): void continue; } - /** @var string $category */ - $category = $message->context('category', ''); - - if ($this->categories->isExcluded($category)) { + if ($this->categories->isExcluded($message->category())) { unset($messages[$i]); continue; } From a8e90ce32c1ca1ed08589bd7a425d8588ea1863c Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 20 Jun 2024 11:22:02 +0300 Subject: [PATCH 2/4] Tests --- src/Message.php | 4 +++- tests/MessageTest.php | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Message.php b/src/Message.php index ee0b16f9..6c26e0c8 100644 --- a/src/Message.php +++ b/src/Message.php @@ -105,7 +105,9 @@ public function category(): string { $category = $this->context['category'] ?? CategoryFilter::DEFAULT; if (!is_string($category)) { - throw new LogicException('Invalid category value in log context. Got "' . get_debug_type($category) . '".'); + throw new LogicException( + 'Invalid category value in log context. Expected "string", got "' . get_debug_type($category) . '".' + ); } return $category; } diff --git a/tests/MessageTest.php b/tests/MessageTest.php index 064f16b6..2e37ad94 100644 --- a/tests/MessageTest.php +++ b/tests/MessageTest.php @@ -4,6 +4,7 @@ namespace Yiisoft\Log\Tests; +use LogicException; use PHPUnit\Framework\TestCase; use Psr\Log\InvalidArgumentException; use Psr\Log\LogLevel; @@ -167,4 +168,31 @@ public function testParseMessage(string $message, array $context, string $expect $message = new Message(LogLevel::INFO, $message, $context); $this->assertSame($expected, $message->message()); } + + public static function dataCategory(): array + { + return [ + 'without-category' => [Message\CategoryFilter::DEFAULT, []], + 'null-category' => [Message\CategoryFilter::DEFAULT, ['category' => null]], + 'with-category' => ['test', ['category' => 'test']], + ]; + } + + /** + * @dataProvider dataCategory + */ + public function testCategory(string $expected, array $context): void + { + $message = new Message(LogLevel::INFO, 'message', $context); + $this->assertSame($expected, $message->category()); + } + + public function testInvalidCategoryType(): void + { + $message = new Message(LogLevel::INFO, 'message', ['category' => 23.1]); + + $this->expectException(LogicException::class); + $this->expectExceptionMessage('Invalid category value in log context. Expected "string", got "float".'); + $message->category(); + } } From 935244a3f78387476e2ba08a08a63a4374f624e3 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 20 Jun 2024 11:26:43 +0300 Subject: [PATCH 3/4] Add `Message::DEFAULT_CATEGORY` --- CHANGELOG.md | 3 ++- src/ContextProvider/ContextProvider.php | 4 ++-- src/Message.php | 5 +++-- src/Message/CategoryFilter.php | 5 +++++ tests/MessageTest.php | 4 ++-- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80bb408c..c37183a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,8 @@ - Chg #109: Deprecate `Logger` methods `setTraceLevel()` and `setExcludedTracePaths()` in favor of context provider usage (@vjik) - New #111: Add `DateTime` and `DateTimeImmutable` support as time in log context (@vjik) -- New #112: Add `Message::category()` method (@vjik) +- New #112: Add `Message::category()` method and `Message::DEFAULT_CATEGORY` constant, deprecate + `CategoryFilter::DEFAULT` in favor it (@vjik) ## 2.0.0 May 22, 2022 diff --git a/src/ContextProvider/ContextProvider.php b/src/ContextProvider/ContextProvider.php index 8fc3b59c..b6f43dec 100644 --- a/src/ContextProvider/ContextProvider.php +++ b/src/ContextProvider/ContextProvider.php @@ -5,7 +5,7 @@ namespace Yiisoft\Log\ContextProvider; use InvalidArgumentException; -use Yiisoft\Log\Message\CategoryFilter; +use Yiisoft\Log\Message; /** * @psalm-type Backtrace = list microtime(true), 'trace' => $this->collectTrace($trace), 'memory' => memory_get_usage(), - 'category' => CategoryFilter::DEFAULT, + 'category' => Message::DEFAULT_CATEGORY, ]; } diff --git a/src/Message.php b/src/Message.php index 6c26e0c8..659bf4b9 100644 --- a/src/Message.php +++ b/src/Message.php @@ -9,7 +9,6 @@ use Psr\Log\LoggerTrait; use Psr\Log\LogLevel; use Stringable; -use Yiisoft\Log\Message\CategoryFilter; use Yiisoft\Log\Message\ContextValueExtractor; use Yiisoft\VarDumper\VarDumper; @@ -20,6 +19,8 @@ */ final class Message { + public const DEFAULT_CATEGORY = 'application'; + /** * @var string Log message level. * @@ -103,7 +104,7 @@ public function context(string $name = null, mixed $default = null): mixed public function category(): string { - $category = $this->context['category'] ?? CategoryFilter::DEFAULT; + $category = $this->context['category'] ?? self::DEFAULT_CATEGORY; if (!is_string($category)) { throw new LogicException( 'Invalid category value in log context. Expected "string", got "' . get_debug_type($category) . '".' diff --git a/src/Message/CategoryFilter.php b/src/Message/CategoryFilter.php index 5b38d3a0..22e77795 100644 --- a/src/Message/CategoryFilter.php +++ b/src/Message/CategoryFilter.php @@ -6,6 +6,8 @@ use InvalidArgumentException; +use Yiisoft\Log\Message; + use function gettype; use function is_string; use function rtrim; @@ -18,6 +20,9 @@ */ final class CategoryFilter { + /** + * @deprecated Since 2.1, will be removed in 3.0. Use {@see Message::DEFAULT_CATEGORY} instead. + */ public const DEFAULT = 'application'; /** diff --git a/tests/MessageTest.php b/tests/MessageTest.php index 2e37ad94..6751133f 100644 --- a/tests/MessageTest.php +++ b/tests/MessageTest.php @@ -172,8 +172,8 @@ public function testParseMessage(string $message, array $context, string $expect public static function dataCategory(): array { return [ - 'without-category' => [Message\CategoryFilter::DEFAULT, []], - 'null-category' => [Message\CategoryFilter::DEFAULT, ['category' => null]], + 'without-category' => [Message::DEFAULT_CATEGORY, []], + 'null-category' => [Message::DEFAULT_CATEGORY, ['category' => null]], 'with-category' => ['test', ['category' => 'test']], ]; } From 52e013cd7512433784ff602d23ea1026bebb5003 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 20 Jun 2024 11:40:46 +0300 Subject: [PATCH 4/4] phpdoc --- src/Message.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Message.php b/src/Message.php index 659bf4b9..5d673700 100644 --- a/src/Message.php +++ b/src/Message.php @@ -102,6 +102,11 @@ public function context(string $name = null, mixed $default = null): mixed return $this->context[$name] ?? $default; } + /** + * Returns the log message category. {@see self::DEFAULT_CATEGORY} is returned if the category is not set. + * + * @return string The log message category. + */ public function category(): string { $category = $this->context['category'] ?? self::DEFAULT_CATEGORY;