Skip to content

Commit

Permalink
Merge pull request #267 from elecena/NanoLogger/fix-errors
Browse files Browse the repository at this point in the history
NanoLogger: pushProcessor() now accepts LogRecord, not an array
  • Loading branch information
macbre committed Aug 9, 2023
2 parents 797c043 + a014e6d commit fbc7790
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 11 deletions.
20 changes: 9 additions & 11 deletions classes/logger/NanoLogger.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

namespace Nano\Logger;

use Monolog\Handler\HandlerInterface;
use Monolog\Logger;
use Monolog\LogRecord;
use Monolog\Handler\RotatingFileHandler;

// processors
Expand All @@ -18,9 +20,9 @@ class NanoLogger
/**
* List of handlers defined via \Nano\Logger\NanoLogger::pushHandler
*
* @var \Monolog\Handler\HandlerInterface[]
* @var HandlerInterface[]
*/
private static $handlers = [];
private static array $handlers = [];

/**
* Return new instance of the Logger channel
Expand All @@ -29,9 +31,8 @@ class NanoLogger
*
* @param string $name channel name
* @param array $extraFields fields to be added to every message sent from this logger
* @return \Monolog\Logger
*/
public static function getLogger($name, array $extraFields = [])
public static function getLogger(string $name, array $extraFields = []): Logger
{
$logger = new Logger($name);

Expand All @@ -48,15 +49,15 @@ public static function getLogger($name, array $extraFields = [])
if (!isset($_SERVER['REQUEST_URI'])) {
$scriptName = rtrim(getcwd(), '/') . '/' . ltrim($_SERVER['PHP_SELF'], '/');

$logger->pushProcessor(function (array $record) use ($scriptName) {
$logger->pushProcessor(function (LogRecord $record) use ($scriptName) {
$record['extra']['script'] = $scriptName;
return $record;
});
}

// add per-logger extra fields
if (!empty($extraFields)) {
$logger->pushProcessor(function (array $record) use ($extraFields) {
$logger->pushProcessor(function (LogRecord $record) use ($extraFields) {
$record['extra'] = array_merge($record['extra'], $extraFields);
return $record;
});
Expand All @@ -67,10 +68,8 @@ public static function getLogger($name, array $extraFields = [])

/**
* Register a new log handler
*
* @param \Monolog\Handler\HandlerInterface $handler
*/
public static function pushHandler($handler)
public static function pushHandler(HandlerInterface $handler): void
{
self::$handlers[] = $handler;
}
Expand All @@ -80,9 +79,8 @@ public static function pushHandler($handler)
*
* @param string $dir App directory
* @param string $stream log file name
* @param int $level
*/
public static function pushStreamHandler($dir, $stream, $level=Logger::DEBUG)
public static function pushStreamHandler(string $dir, string $stream, int $level=Logger::DEBUG): void
{
$stream = sprintf('%s/logs/%s.log', $dir, $stream);

Expand Down
39 changes: 39 additions & 0 deletions tests/NanoLoggerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

use Monolog\Logger;
use Monolog\LogRecord;
use Nano\Logger\NanoLogger;

/**
* No-op logging handler. Keeps track of LogRecords sent to it.
*/
class TestLoggingHandler extends Monolog\Handler\SyslogHandler
{
public ?LogRecord $lastRecord = null;
protected function write(LogRecord $record): void
{
$this->lastRecord = $record;
}
}

class NanoLoggerTest extends \Nano\NanoBaseTest
{
public function testGetLogger(): void
{
// register a global logging handler for easier testing
$handler = new TestLoggingHandler(ident: 'foo');
NanoLogger::pushHandler($handler);

$logger = NanoLogger::getLogger(name: __CLASS__, extraFields: ['foo'=>'bar']);
$this->assertInstanceOf(Logger::class, $logger);
$this->assertEquals(__CLASS__, $logger->getName());

// now, let's assert on what's getting logged
$logger->info('Message');
$this->assertInstanceOf(LogRecord::class, $handler->lastRecord);

$this->assertEquals(Monolog\Level::Info, $handler->lastRecord->level);
$this->assertEquals('Message', $handler->lastRecord->message);
$this->assertEquals('bar', $handler->lastRecord->extra['foo']);
}
}

0 comments on commit fbc7790

Please sign in to comment.