monolog: add CeeFormatter

This formatter extends LogstashFormatter to prefix records with "cee token"
used for syslog and JSON structured logging. See also related task for more
context.

Bug: T211124
Change-Id: I3cdeb4c666f54039b5e8ecc67bd4937220333526
This commit is contained in:
Filippo Giunchedi 2018-12-05 16:00:04 +01:00
parent 0481365004
commit 667b17a319
3 changed files with 41 additions and 0 deletions

View file

@ -886,6 +886,7 @@ $wgAutoloadLocalClasses = [
'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php',
'MediaWiki\\Logger\\Monolog\\AvroFormatter' => __DIR__ . '/includes/debug/logger/monolog/AvroFormatter.php',
'MediaWiki\\Logger\\Monolog\\BufferHandler' => __DIR__ . '/includes/debug/logger/monolog/BufferHandler.php',
'MediaWiki\\Logger\\Monolog\\CeeFormatter' => __DIR__ . '/includes/debug/logger/monolog/CeeFormatter.php',
'MediaWiki\\Logger\\Monolog\\KafkaHandler' => __DIR__ . '/includes/debug/logger/monolog/KafkaHandler.php',
'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php',

View file

@ -0,0 +1,23 @@
<?php
namespace MediaWiki\Logger\Monolog;
/**
* CeeFormatter extends LogstashFormatter to prefix records with a "cee cookie".
* The cookie is used to tell JSON and non-JSON messages apart when logging to syslog.
* See also: https://www.rsyslog.com/doc/v8-stable/configuration/modules/mmjsonparse.html
*
* Compatible with Monolog 1.x only.
*
* @since 1.33
*/
class CeeFormatter extends LogstashFormatter {
/**
* Format records with a cee cookie
* @param array $record
* @return array
*/
public function format( array $record ) {
return "@cee: " . parent::format( $record );
}
}

View file

@ -0,0 +1,17 @@
<?php
namespace MediaWiki\Logger\Monolog;
/**
* @covers \MediaWiki\Logger\Monolog\CeeFormatter
*/
class CeeFormatterTest extends \PHPUnit\Framework\TestCase {
public function testV1() {
$ls_formatter = new LogstashFormatter( 'app', 'system', null, 'ctx_', LogstashFormatter::V1 );
$cee_formatter = new CeeFormatter( 'app', 'system', null, 'ctx_', LogstashFormatter::V1 );
$record = [ 'extra' => [ 'url' => 1 ], 'context' => [ 'url' => 2 ] ];
$this->assertSame(
$cee_formatter->format( $record ),
"@cee: " . $ls_formatter->format( $record ) );
}
}