summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsko Nõmm <asko@nth.ee>2024-11-15 10:57:19 +0200
committerAsko Nõmm <asko@nth.ee>2024-11-15 10:57:19 +0200
commit9291fc3af8d0d87b58ef2de96f5d650038db32c0 (patch)
tree9e17944763c4d0494af534511096fd6ca662f083
parentee86238c3a03d8f1384dc1db39a593688ef11e76 (diff)
Implement LoggerInterface.
-rw-r--r--composer.json3
-rw-r--r--composer.lock59
-rw-r--r--src/Format.php36
-rw-r--r--src/Loggr.php54
-rw-r--r--src/Message.php1
-rw-r--r--tests/FormatTest.php14
6 files changed, 138 insertions, 29 deletions
diff --git a/composer.json b/composer.json
index 83327a3..49ce1b5 100644
--- a/composer.json
+++ b/composer.json
@@ -23,7 +23,8 @@
}
],
"require": {
- "php": ">=8.3"
+ "php": ">=8.3",
+ "psr/log": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "11",
diff --git a/composer.lock b/composer.lock
index 8e1cda9..39176f7 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,59 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "8db78070bd8f6669783c69389435993b",
- "packages": [],
+ "content-hash": "d206ce8d207d38506e18de159f8e68ad",
+ "packages": [
+ {
+ "name": "psr/log",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
+ },
+ "time": "2024-09-11T13:17:53+00:00"
+ }
+ ],
"packages-dev": [
{
"name": "hamcrest/hamcrest-php",
@@ -1931,12 +1982,12 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=8.3"
},
- "platform-dev": [],
+ "platform-dev": {},
"plugin-api-version": "2.6.0"
}
diff --git a/src/Format.php b/src/Format.php
index d6764f0..e095e29 100644
--- a/src/Format.php
+++ b/src/Format.php
@@ -46,6 +46,7 @@ enum Format
$json = json_encode([
'date' => $dateTime->format('Y-m-d H:i:s'),
'level' => $message->level->value,
+ 'message' => $message->content,
'context' => $message->context,
'trace' => [
'file' => pathinfo($trace_file, PATHINFO_FILENAME),
@@ -79,6 +80,18 @@ enum Format
$filename = pathinfo($trace_file, PATHINFO_FILENAME);
$line .= "{$filename}.{$message->level->value}: ";
+ // Message
+ if (!empty($message->content) && !empty($message->context)) {
+ $line .= "{$message->content} - ";
+ }
+
+ if (!empty($message->content) && empty($message->context)) {
+ $line .= "{$message->content}";
+ }
+
+ // Context
+ if (empty($message->context)) return $line;
+
// Context
if (is_array($message->context) || is_object($message->context)) {
$line .= json_encode($message->context);
@@ -110,7 +123,18 @@ enum Format
$filename = pathinfo($trace_file, PATHINFO_FILENAME);
$line .= "{$filename}.{$message->level->value}: ";
+ // Message
+ if (!empty($message->content) && !empty($message->context)) {
+ $line .= "{$message->content} - ";
+ }
+
+ if (!empty($message->content) && empty($message->context)) {
+ $line .= "{$message->content}";
+ }
+
// Context
+ if (empty($message->context)) return $line;
+
if (is_array($message->context) || is_object($message->context)) {
$line .= json_encode($message->context);
}
@@ -149,6 +173,18 @@ enum Format
$filename = pathinfo($trace_file, PATHINFO_FILENAME);
$line .= "- {$filename} - ";
+ // Message
+ if (!empty($message->content) && !empty($message->context)) {
+ $line .= "{$message->content} - ";
+ }
+
+ if (!empty($message->content) && empty($message->context)) {
+ $line .= "{$message->content}";
+ }
+
+ // Context
+ if (empty($message->context)) return $line;
+
// Context
if (is_array($message->context) || is_object($message->context)) {
$line .= json_encode($message->context);
diff --git a/src/Loggr.php b/src/Loggr.php
index 1d5a58d..742195a 100644
--- a/src/Loggr.php
+++ b/src/Loggr.php
@@ -2,6 +2,8 @@
namespace Asko\Loggr;
+use Psr\Log\LoggerInterface;
+
/**
* Loggr is an extendable logging utility class brought to you by the frustration of
* every logging class always having its own unique format, making debugging difficult.
@@ -11,7 +13,7 @@ namespace Asko\Loggr;
*
* @author Asko Nõmm <asko@faultd.com>
*/
-class Loggr
+class Loggr implements LoggerInterface
{
/** @var array<string, mixed> $trace */
private array $trace;
@@ -34,10 +36,11 @@ class Loggr
* Logs a message at a specified level with optional context.
*
* @param Level $level The severity level of the log message. Defaults to Level::Info.
+ * @param string $message The log message.
* @param mixed $context Additional data or context to include with the log message. Optional.
* @return void
*/
- private function log(Level $level = Level::Info, mixed $context = null): void
+ private function write(Level $level, string $message, mixed $context = null): void
{
if (!$this->driver || !$this->format) {
$this->error = "Driver or format not set.";
@@ -48,6 +51,7 @@ class Loggr
$this->driver->log($this->format->serialize(new Message(
level: $level,
trace: $this->trace,
+ content: $message,
context: $context,
)));
} catch(\Throwable $e) {
@@ -58,96 +62,110 @@ class Loggr
/**
* Logs an emergency level message with optional context.
*
+ * @param string|\Stringable $message
* @param mixed $context Additional data or context to include with the emergency message. Optional.
* @return void
*/
- public function emergency(mixed $context = null): void
+ public function emergency(string|\Stringable $message, mixed $context = null): void
{
$this->trace = debug_backtrace()[0];
- $this->log(Level::Emergency, $context);
+ $this->write(Level::Emergency, $message, $context);
}
/**
* Sends an alert-level log message with optional context.
*
+ * @param string|\Stringable $message
* @param mixed $context Additional data or context to include with the log message. Optional.
* @return void
*/
- public function alert(mixed $context = null): void
+ public function alert(string|\Stringable $message, mixed $context = null): void
{
$this->trace = debug_backtrace()[0];
- $this->log(Level::Alert, $context);
+ $this->write(Level::Alert, $message, $context);
}
/**
* Logs a critical level message with optional context.
*
+ * @param string|\Stringable $message
* @param mixed $context Additional data or context to include with the log message. Optional.
* @return void
*/
- public function critical( mixed $context = null): void
+ public function critical(string|\Stringable $message, mixed $context = null): void
{
$this->trace = debug_backtrace()[0];
- $this->log(Level::Critical, $context);
+ $this->write(Level::Critical, $message, $context);
}
/**
* Logs an error message with optional context.
*
+ * @param string|\Stringable $message
* @param mixed $context Additional data or context to include with the error message. Optional.
* @return void
*/
- public function error(mixed $context = null): void
+ public function error(string|\Stringable $message, mixed $context = null): void
{
$this->trace = debug_backtrace()[0];
- $this->log(Level::Error, $context);
+ $this->write(Level::Error, $message, $context);
}
/**
* Logs a warning message with the specified context.
*
+ * @param string|\Stringable $message
* @param mixed $context Optional context information to include in the log.
* @return void
*/
- public function warning(mixed $context = null): void
+ public function warning(string|\Stringable $message, mixed $context = null): void
{
$this->trace = debug_backtrace()[0];
- $this->log(Level::Warning, $context);
+ $this->write(Level::Warning, $message, $context);
}
/**
* Logs a notice message with the specified context.
*
+ * @param string|\Stringable $message
* @param mixed $context Optional context information to include in the log.
* @return void
*/
- public function notice(mixed $context = null): void
+ public function notice(string|\Stringable $message, mixed $context = null): void
{
$this->trace = debug_backtrace()[0];
- $this->log(Level::Notice, $context);
+ $this->write(Level::Notice, $message, $context);
}
/**
* Logs an informational message with the specified context.
*
+ * @param string|\Stringable $message
* @param mixed $context Optional context information to include in the log.
* @return void
*/
- public function info(mixed $context = null): void
+ public function info(string|\Stringable $message, mixed $context = null): void
{
$this->trace = debug_backtrace()[0];
- $this->log(Level::Info, $context);
+ $this->write(Level::Info, $message, $context);
}
/**
* Logs a debug message with the specified context.
*
+ * @param string|\Stringable $message
* @param mixed $context Optional context information to include in the log.
* @return void
*/
- public function debug(mixed $context = null): void
+ public function debug(string|\Stringable $message, mixed $context = null): void
+ {
+ $this->trace = debug_backtrace()[0];
+ $this->write(Level::Debug, $message, $context);
+ }
+
+ public function log($level, \Stringable|string $message, array $context = []): void
{
$this->trace = debug_backtrace()[0];
- $this->log(Level::Debug, $context);
+ $this->write(Level::from($level), $message, $context);
}
} \ No newline at end of file
diff --git a/src/Message.php b/src/Message.php
index 972b01a..75e5e22 100644
--- a/src/Message.php
+++ b/src/Message.php
@@ -11,6 +11,7 @@ readonly class Message
public Level $level,
/** @var array<string, mixed> $trace */
public array $trace = [],
+ public string $content = '',
public mixed $context = null,
) {}
} \ No newline at end of file
diff --git a/tests/FormatTest.php b/tests/FormatTest.php
index f000631..16f765d 100644
--- a/tests/FormatTest.php
+++ b/tests/FormatTest.php
@@ -16,13 +16,13 @@ class FormatTest extends MockeryTestCase
$message = new Message(
level: Level::Info,
trace: debug_backtrace()[0],
- context: ['message' => 'test'],
+ context: ['test' => 'test'],
);
$format = Format::JSON;
$serializedMessage = $format->serialize($message);
$full_date = (new DateTime())->format('Y-m-d H:i:s');
- $expectedJson = '{"date":"' . $full_date . '","level":"INFO","context":{"message":"test"},"trace":{"file":"TestCase","line":1182}}';
+ $expectedJson = '{"date":"' . $full_date . '","level":"INFO","message":"","context":{"test":"test"},"trace":{"file":"TestCase","line":1182}}';
$this->assertEquals($expectedJson, $serializedMessage);
}
@@ -32,13 +32,14 @@ class FormatTest extends MockeryTestCase
$message = new Message(
level: Level::Info,
trace: debug_backtrace()[0],
+ content: 'test',
context: ['message' => 'test'],
);
$format = Format::IntelliJ;
$serializedMessage = $format->serialize($message);
$full_date = (new DateTime())->format('Y-m-d H:i:s');
- $expected = "{$full_date} [1182] INFO - TestCase - {\"message\":\"test\"}";
+ $expected = "{$full_date} [1182] INFO - TestCase - test - {\"message\":\"test\"}";
$this->assertEquals($expected, $serializedMessage);
}
@@ -48,7 +49,7 @@ class FormatTest extends MockeryTestCase
$message = new Message(
level: Level::Info,
trace: debug_backtrace()[0],
- context: "hello world",
+ content: "hello world",
);
$format = Format::IntelliJ;
@@ -64,13 +65,14 @@ class FormatTest extends MockeryTestCase
$message = new Message(
level: Level::Info,
trace: debug_backtrace()[0],
+ content: 'test',
context: ['message' => 'test'],
);
$format = Format::Laravel;
$serializedMessage = $format->serialize($message);
$full_date = (new DateTime())->format('Y-m-d H:i:s');
- $expected = "[{$full_date}] TestCase.INFO: {\"message\":\"test\"}";
+ $expected = "[{$full_date}] TestCase.INFO: test - {\"message\":\"test\"}";
$this->assertEquals($expected, $serializedMessage);
}
@@ -80,7 +82,7 @@ class FormatTest extends MockeryTestCase
$message = new Message(
level: Level::Info,
trace: debug_backtrace()[0],
- context: "hello world",
+ content: "hello world",
);
$format = Format::Laravel;