1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-06 05:07:36 +02:00

Merge pull request #238 from kriswallsmith/master

added level support to introspection processor
This commit is contained in:
Jordi Boggiano
2013-09-27 07:18:10 -07:00
2 changed files with 86 additions and 14 deletions

View File

@@ -11,6 +11,8 @@
namespace Monolog\Processor;
use Monolog\Logger;
/**
* Injects line/file:class/function where the log message came from
*
@@ -24,12 +26,24 @@ namespace Monolog\Processor;
*/
class IntrospectionProcessor
{
private $level;
public function __construct($level = Logger::DEBUG)
{
$this->level = $level;
}
/**
* @param array $record
* @return array
*/
public function __invoke(array $record)
{
// return if the level is not high enough
if ($record['level'] < $this->level) {
return $record;
}
$trace = debug_backtrace();
// skip first since it's always the current method

View File

@@ -9,8 +9,24 @@
* file that was distributed with this source code.
*/
namespace Acme;
class Tester
{
public function test($handler, $record)
{
$handler->handle($record);
}
}
function tester($handler, $record)
{
$handler->handle($record);
}
namespace Monolog\Processor;
use Monolog\Logger;
use Monolog\TestCase;
use Monolog\Handler\TestHandler;
@@ -32,7 +48,7 @@ class IntrospectionProcessorTest extends TestCase
$tester->test($handler, $this->getRecord());
list($record) = $handler->getRecords();
$this->assertEquals(__FILE__, $record['extra']['file']);
$this->assertEquals(58, $record['extra']['line']);
$this->assertEquals(18, $record['extra']['line']);
$this->assertEquals('Acme\Tester', $record['extra']['class']);
$this->assertEquals('test', $record['extra']['function']);
}
@@ -43,23 +59,65 @@ class IntrospectionProcessorTest extends TestCase
\Acme\tester($handler, $this->getRecord());
list($record) = $handler->getRecords();
$this->assertEquals(__FILE__, $record['extra']['file']);
$this->assertEquals(64, $record['extra']['line']);
$this->assertEquals(24, $record['extra']['line']);
$this->assertEquals(null, $record['extra']['class']);
$this->assertEquals('Acme\tester', $record['extra']['function']);
}
}
namespace Acme;
class Tester
{
public function test($handler, $record)
public function testLevelTooLow()
{
$handler->handle($record);
$input = array(
'level' => Logger::DEBUG,
'extra' => array(),
);
$expected = $input;
$processor = new IntrospectionProcessor(Logger::CRITICAL);
$actual = $processor($input);
$this->assertEquals($expected, $actual);
}
public function testLevelEqual()
{
$input = array(
'level' => Logger::CRITICAL,
'extra' => array(),
);
$expected = $input;
$expected['extra'] = array(
'file' => null,
'line' => null,
'class' => 'ReflectionMethod',
'function' => 'invokeArgs',
);
$processor = new IntrospectionProcessor(Logger::CRITICAL);
$actual = $processor($input);
$this->assertEquals($expected, $actual);
}
public function testLevelHigher()
{
$input = array(
'level' => Logger::EMERGENCY,
'extra' => array(),
);
$expected = $input;
$expected['extra'] = array(
'file' => null,
'line' => null,
'class' => 'ReflectionMethod',
'function' => 'invokeArgs',
);
$processor = new IntrospectionProcessor(Logger::CRITICAL);
$actual = $processor($input);
$this->assertEquals($expected, $actual);
}
}
function tester($handler, $record)
{
$handler->handle($record);
}