Permalink
Browse files

Add applicationName option which gets set to the logstash @type field

  • Loading branch information...
1 parent 6aaf70d commit 798a039040a32c931fb8e7934d90a2637a6353ab @timmow timmow committed Dec 10, 2012
Showing with 32 additions and 4 deletions.
  1. +11 −2 src/Monolog/Formatter/LogstashFormatter.php
  2. +21 −2 tests/Monolog/Formatter/LogstashFormatterTest.php
@@ -23,11 +23,16 @@
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;
/**
+ * @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)
*/
protected $extraPrefix;
@@ -38,12 +43,13 @@ class LogstashFormatter extends NormalizerFormatter
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
parent::__construct('c');
$this->systemName = $systemName ?: gethostname();
+ $this->applicationName = $applicationName;
$this->extraPrefix = $extraPrefix;
$this->contextPrefix = $contextPrefix;
@@ -62,6 +68,9 @@ public function format(array $record)
'@source' => $this->systemName
);
+ if (isset($this->applicationName)) {
+ $message['@type'] = $this->applicationName;
+ }
$message['@fields'] = array();
$message['@fields']['channel'] = $record['channel'];
$message['@fields']['level'] = $record['level'];
@@ -96,7 +96,7 @@ public function testFormatWithContext()
$this->assertEquals('logger', $message_array['ctxt_from']);
// Test with extraPrefix
- $formatter = new LogstashFormatter('test', null, 'CTX');
+ $formatter = new LogstashFormatter('test', null, null, 'CTX');
$message = json_decode($formatter->format($record), true);
@@ -131,12 +131,31 @@ public function testFormatWithExtra()
$this->assertEquals('pair', $message_array['key']);
// Test with extraPrefix
- $formatter = new LogstashFormatter('test', 'EXT');
+ $formatter = new LogstashFormatter('test', null, 'EXT');
$message = json_decode($formatter->format($record), true);
$message_array = $message['@fields'];
$this->assertArrayHasKey('EXTkey', $message_array);
$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']);
+ }
}

0 comments on commit 798a039

Please sign in to comment.