%PDF- %PDF-
| Direktori : /www/varak.net/paste.varak.net-5.6/vendor/monolog/monolog/src/Monolog/Handler/ |
| Current File : /www/varak.net/paste.varak.net-5.6/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php |
<?php
/*
* This file is part of the Monolog package.
*
* (c) Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Monolog\Handler;
use Monolog\Logger;
/**
* Class to record a log on a NewRelic application
*
* @see https://docs.newrelic.com/docs/agents/php-agent
*/
class NewRelicHandler extends AbstractProcessingHandler
{
/**
* Name of the New Relic application that will receive logs from this handler.
*
* @var string
*/
protected $appName;
/**
* Some context and extra data is passed into the handler as arrays of values. Do we send them as is
* (useful if we are using the API), or explode them for display on the NewRelic RPM website?
*
* @var boolean
*/
protected $explodeArrays;
/**
* {@inheritDoc}
*
* @param string $appName
* @param boolean $implodeArrays
*/
public function __construct($level = Logger::ERROR, $bubble = true, $appName = null, $explodeArrays = false)
{
parent::__construct($level, $bubble);
$this->appName = $appName;
$this->explodeArrays = $explodeArrays;
}
/**
* {@inheritDoc}
*/
protected function write(array $record)
{
if (!$this->isNewRelicEnabled()) {
throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler');
}
if ($appName = $this->getAppName($record['context'])) {
$this->setNewRelicAppName($appName);
}
if (isset($record['context']['exception']) && $record['context']['exception'] instanceof \Exception) {
newrelic_notice_error($record['message'], $record['context']['exception']);
unset($record['context']['exception']);
} else {
newrelic_notice_error($record['message']);
}
foreach ($record['context'] as $key => $parameter) {
if (is_array($parameter) && $this->explodeArrays) {
foreach ($parameter as $paramKey => $paramValue) {
newrelic_add_custom_parameter('context_' . $key . '_' . $paramKey, $paramValue);
}
} else {
newrelic_add_custom_parameter('context_' . $key, $parameter);
}
}
foreach ($record['extra'] as $key => $parameter) {
if (is_array($parameter) && $this->explodeArrays) {
foreach ($parameter as $paramKey => $paramValue) {
newrelic_add_custom_parameter('extra_' . $key . '_' . $paramKey, $paramValue);
}
} else {
newrelic_add_custom_parameter('extra_' . $key, $parameter);
}
}
}
/**
* Checks whether the NewRelic extension is enabled in the system.
*
* @return bool
*/
protected function isNewRelicEnabled()
{
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);
}
}