1
0
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:
Tim Mower
2012-12-10 12:35:34 +00:00
parent 6aaf70d363
commit 798a039040
2 changed files with 32 additions and 4 deletions

View File

@@ -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'];

View File

@@ -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']);
}
} }