mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-05 20:57:36 +02:00
Add applicationName option which gets set to the logstash @type field
This commit is contained in:
@@ -23,10 +23,15 @@ use Monolog\Logger;
|
|||||||
class LogstashFormatter extends NormalizerFormatter
|
class LogstashFormatter extends NormalizerFormatter
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var string the name of the system for the Gelf log message
|
* @var string the name of the system for the Logstash log message, used to fill the @source field
|
||||||
*/
|
*/
|
||||||
protected $systemName;
|
protected $systemName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string an application name for the Logstash log message, used to fill the @type field
|
||||||
|
*/
|
||||||
|
protected $applicationName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string a prefix for 'extra' fields from the Monolog record (optional)
|
* @var string a prefix for 'extra' fields from the Monolog record (optional)
|
||||||
*/
|
*/
|
||||||
@@ -38,12 +43,13 @@ class LogstashFormatter extends NormalizerFormatter
|
|||||||
protected $contextPrefix;
|
protected $contextPrefix;
|
||||||
|
|
||||||
|
|
||||||
public function __construct($systemName = null, $extraPrefix = null, $contextPrefix = 'ctxt_')
|
public function __construct($systemName = null, $applicationName = null, $extraPrefix = null, $contextPrefix = 'ctxt_')
|
||||||
{
|
{
|
||||||
//log stash requires a ISO 8601 format date
|
//log stash requires a ISO 8601 format date
|
||||||
parent::__construct('c');
|
parent::__construct('c');
|
||||||
|
|
||||||
$this->systemName = $systemName ?: gethostname();
|
$this->systemName = $systemName ?: gethostname();
|
||||||
|
$this->applicationName = $applicationName;
|
||||||
|
|
||||||
$this->extraPrefix = $extraPrefix;
|
$this->extraPrefix = $extraPrefix;
|
||||||
$this->contextPrefix = $contextPrefix;
|
$this->contextPrefix = $contextPrefix;
|
||||||
@@ -62,6 +68,9 @@ class LogstashFormatter extends NormalizerFormatter
|
|||||||
'@source' => $this->systemName
|
'@source' => $this->systemName
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (isset($this->applicationName)) {
|
||||||
|
$message['@type'] = $this->applicationName;
|
||||||
|
}
|
||||||
$message['@fields'] = array();
|
$message['@fields'] = array();
|
||||||
$message['@fields']['channel'] = $record['channel'];
|
$message['@fields']['channel'] = $record['channel'];
|
||||||
$message['@fields']['level'] = $record['level'];
|
$message['@fields']['level'] = $record['level'];
|
||||||
|
@@ -96,7 +96,7 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('logger', $message_array['ctxt_from']);
|
$this->assertEquals('logger', $message_array['ctxt_from']);
|
||||||
|
|
||||||
// Test with extraPrefix
|
// Test with extraPrefix
|
||||||
$formatter = new LogstashFormatter('test', null, 'CTX');
|
$formatter = new LogstashFormatter('test', null, null, 'CTX');
|
||||||
$message = json_decode($formatter->format($record), true);
|
$message = json_decode($formatter->format($record), true);
|
||||||
|
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('pair', $message_array['key']);
|
$this->assertEquals('pair', $message_array['key']);
|
||||||
|
|
||||||
// Test with extraPrefix
|
// Test with extraPrefix
|
||||||
$formatter = new LogstashFormatter('test', 'EXT');
|
$formatter = new LogstashFormatter('test', null, 'EXT');
|
||||||
$message = json_decode($formatter->format($record), true);
|
$message = json_decode($formatter->format($record), true);
|
||||||
|
|
||||||
$message_array = $message['@fields'];
|
$message_array = $message['@fields'];
|
||||||
@@ -139,4 +139,23 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertArrayHasKey('EXTkey', $message_array);
|
$this->assertArrayHasKey('EXTkey', $message_array);
|
||||||
$this->assertEquals('pair', $message_array['EXTkey']);
|
$this->assertEquals('pair', $message_array['EXTkey']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFormatWithApplicationName()
|
||||||
|
{
|
||||||
|
$formatter = new LogstashFormatter('test', 'app');
|
||||||
|
$record = array(
|
||||||
|
'level' => Logger::ERROR,
|
||||||
|
'level_name' => 'ERROR',
|
||||||
|
'channel' => 'meh',
|
||||||
|
'context' => array('from' => 'logger'),
|
||||||
|
'datetime' => new \DateTime("@0"),
|
||||||
|
'extra' => array('key' => 'pair'),
|
||||||
|
'message' => 'log'
|
||||||
|
);
|
||||||
|
|
||||||
|
$message = json_decode($formatter->format($record), true);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('@type', $message);
|
||||||
|
$this->assertEquals('app', $message['@type']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user