mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-05 12:47:39 +02:00
the appname can now be set from the handler's constructor
This commit is contained in:
@@ -21,11 +21,22 @@ use Monolog\Logger;
|
|||||||
class NewRelicHandler extends AbstractProcessingHandler
|
class NewRelicHandler extends AbstractProcessingHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* Name of the New Relic application that will receive logs from this handler.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
*/
|
*/
|
||||||
public function __construct($level = Logger::ERROR, $bubble = true)
|
protected $appName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* @param string $appName
|
||||||
|
*/
|
||||||
|
public function __construct($level = Logger::ERROR, $bubble = true, $appName = null)
|
||||||
{
|
{
|
||||||
parent::__construct($level, $bubble);
|
parent::__construct($level, $bubble);
|
||||||
|
|
||||||
|
$this->appName = $appName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,8 +48,8 @@ class NewRelicHandler extends AbstractProcessingHandler
|
|||||||
throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler');
|
throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($record['context']['appname'])) {
|
if ($appName = $this->getAppName($record['context'])) {
|
||||||
newrelic_set_appname($record['context']['appname']);
|
$this->setNewRelicAppName($appName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($record['context']['exception']) && $record['context']['exception'] instanceof \Exception) {
|
if (isset($record['context']['exception']) && $record['context']['exception'] instanceof \Exception) {
|
||||||
@@ -62,4 +73,30 @@ class NewRelicHandler extends AbstractProcessingHandler
|
|||||||
{
|
{
|
||||||
return extension_loaded('newrelic');
|
return extension_loaded('newrelic');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the appname where this log should be sent. Each log can override the default appname, set in this
|
||||||
|
* handler's constructor, by providing the appname in its context.
|
||||||
|
*
|
||||||
|
* @param array $context
|
||||||
|
* @return null|string
|
||||||
|
*/
|
||||||
|
protected function getAppName(array $context)
|
||||||
|
{
|
||||||
|
if (isset($context['appname'])) {
|
||||||
|
return $context['appname'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->appName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the NewRelic application that should receive this log.
|
||||||
|
*
|
||||||
|
* @param string $appName
|
||||||
|
*/
|
||||||
|
protected function setNewRelicAppName($appName)
|
||||||
|
{
|
||||||
|
newrelic_set_appname($appName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,9 +13,17 @@ namespace Monolog\Handler;
|
|||||||
|
|
||||||
use Monolog\TestCase;
|
use Monolog\TestCase;
|
||||||
use Monolog\Logger;
|
use Monolog\Logger;
|
||||||
|
use Psr\Log\LogLevel;
|
||||||
|
|
||||||
class NewRelicHandlerTest extends TestCase
|
class NewRelicHandlerTest extends TestCase
|
||||||
{
|
{
|
||||||
|
public static $appname;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$this::$appname = null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException Monolog\Handler\MissingExtensionException
|
* @expectedException Monolog\Handler\MissingExtensionException
|
||||||
*/
|
*/
|
||||||
@@ -42,6 +50,30 @@ class NewRelicHandlerTest extends TestCase
|
|||||||
$handler = new StubNewRelicHandler();
|
$handler = new StubNewRelicHandler();
|
||||||
$handler->handle($this->getRecord(Logger::ERROR, 'log message', array('appname' => 'myApp')));
|
$handler->handle($this->getRecord(Logger::ERROR, 'log message', array('appname' => 'myApp')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testTheAppNameIsNullByDefault()
|
||||||
|
{
|
||||||
|
$handler = new StubNewRelicHandler();
|
||||||
|
$handler->handle($this->getRecord(Logger::ERROR, 'log message'));
|
||||||
|
|
||||||
|
$this->assertEquals(null, $this::$appname);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTheAppNameCanBeInjectedFromtheConstructor()
|
||||||
|
{
|
||||||
|
$handler = new StubNewRelicHandler(LogLevel::ALERT, false, 'myAppName');
|
||||||
|
$handler->handle($this->getRecord(Logger::ERROR, 'log message'));
|
||||||
|
|
||||||
|
$this->assertEquals('myAppName', $this::$appname);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTheAppNameCanBeOverriddenFromEachLog()
|
||||||
|
{
|
||||||
|
$handler = new StubNewRelicHandler(LogLevel::ALERT, false, 'myAppName');
|
||||||
|
$handler->handle($this->getRecord(Logger::ERROR, 'log message', array('appname' => 'logAppName')));
|
||||||
|
|
||||||
|
$this->assertEquals('logAppName', $this::$appname);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class StubNewRelicHandlerWithoutExtension extends NewRelicHandler
|
class StubNewRelicHandlerWithoutExtension extends NewRelicHandler
|
||||||
@@ -65,9 +97,9 @@ function newrelic_notice_error()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function newrelic_set_appname()
|
function newrelic_set_appname($appname)
|
||||||
{
|
{
|
||||||
return true;
|
return NewRelicHandlerTest::$appname = $appname;
|
||||||
}
|
}
|
||||||
|
|
||||||
function newrelic_add_custom_parameter()
|
function newrelic_add_custom_parameter()
|
||||||
|
Reference in New Issue
Block a user