Skip to content
Extraits de code Groupes Projets
Valider 01ebe2ec rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers

Merge pull request #8749 from piwik/7239

Added LogViewer as submodule + format a multi line log message into multiple log messages for file handler
parents 8cd9a931 7b0f0d07
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -47,3 +47,6 @@
path = misc/log-analytics
url = https://github.com/piwik/piwik-log-analytics.git
branch = master
[submodule "plugins/LogViewer"]
path = plugins/LogViewer
url = https://github.com/piwik/plugin-LogViewer.git
Subproject commit a8a7bc6f8976c4c354386559599dc5f55502029f
......@@ -23,12 +23,16 @@ class LineMessageFormatter implements FormatterInterface
*/
private $logMessageFormat;
private $allowInlineLineBreaks;
/**
* @param string $logMessageFormat
* @param bool $allowInlineLineBreaks If disabled, a log message will be created for each line
*/
public function __construct($logMessageFormat)
public function __construct($logMessageFormat, $allowInlineLineBreaks = true)
{
$this->logMessageFormat = $logMessageFormat;
$this->allowInlineLineBreaks = $allowInlineLineBreaks;
}
public function format(array $record)
......@@ -36,18 +40,34 @@ class LineMessageFormatter implements FormatterInterface
$class = isset($record['extra']['class']) ? $record['extra']['class'] : '';
$date = $record['datetime']->format('Y-m-d H:i:s');
$message = $this->prefixMessageWithRequestId($record);
$message = trim($record['message']);
if ($this->allowInlineLineBreaks) {
$message = str_replace("\n", "\n ", $message); // intend lines
$messages = array($message);
} else {
$messages = explode("\n", $message);
}
$total = '';
foreach ($messages as $message) {
$message = $this->prefixMessageWithRequestId($record, $message);
$total .= $this->formatMessage($class, $message, $date, $record);
}
return $total;
}
private function formatMessage($class, $message, $date, $record)
{
$message = str_replace(
array('%tag%', '%message%', '%datetime%', '%level%'),
array($class, $message, $date, $record['level_name']),
$this->logMessageFormat
);
$message = str_replace("\n", "\n ", $message);
$message .= "\n";
return $message;
}
......@@ -60,11 +80,11 @@ class LineMessageFormatter implements FormatterInterface
return $records;
}
private function prefixMessageWithRequestId(array $record)
private function prefixMessageWithRequestId(array $record, $message)
{
$requestId = isset($record['extra']['request_id']) ? $record['extra']['request_id'] : '';
$message = trim($record['message']);
$message = trim($message);
if ($requestId) {
$message = '[' . $requestId . '] ' . $message;
......
......@@ -46,7 +46,10 @@ return array(
'Piwik\Plugins\Monolog\Handler\FileHandler' => DI\object()
->constructor(DI\get('log.file.filename'), DI\get('log.level'))
->method('setFormatter', DI\get('Piwik\Plugins\Monolog\Formatter\LineMessageFormatter')),
->method('setFormatter', DI\get('log.lineMessageFormatter.file')),
'log.lineMessageFormatter.file' => DI\object('Piwik\Plugins\Monolog\Formatter\LineMessageFormatter')
->constructorParameter('allowInlineLineBreaks', false),
'Piwik\Plugins\Monolog\Handler\DatabaseHandler' => DI\object()
->constructor(DI\get('log.level'))
......
......@@ -201,6 +201,8 @@ class LogTest extends IntegrationTestCase
$fileContents = file_get_contents(self::getLogFileLocation());
$fileContents = $this->removePathsFromBacktrace($fileContents);
$expectedMessage = str_replace("\n ", "\n[Monolog]", $expectedMessage);
$this->assertEquals($expectedMessage . "\n", $fileContents);
} else if ($backend == 'database') {
$queryLog = Db::isQueryLogEnabled();
......
......@@ -64,7 +64,7 @@ class LineMessageFormatterTest extends \PHPUnit_Framework_TestCase
*/
public function it_should_indent_multiline_message()
{
$formatter = new LineMessageFormatter('%message%');
$formatter = new LineMessageFormatter('%level% %message%');
$record = array(
'message' => "Hello world\ntest\ntest",
......@@ -73,10 +73,34 @@ class LineMessageFormatterTest extends \PHPUnit_Framework_TestCase
);
$formatted = <<<LOG
Hello world
ERROR Hello world
test
test
LOG;
$this->assertEquals($formatted, $formatter->format($record));
}
/**
* @test
*/
public function it_should_split_inline_line_breaks_into_many_messages_if_disabled()
{
$formatter = new LineMessageFormatter('%level% %message%', $allowInlineLineBreaks = false);
$record = array(
'message' => "Hello world\ntest\ntest",
'datetime' => DateTime::createFromFormat('U', 0),
'level_name' => 'ERROR',
'extra' => array('request_id' => '1234')
);
$formatted = <<<LOG
ERROR [1234] Hello world
ERROR [1234] test
ERROR [1234] test
LOG;
$this->assertEquals($formatted, $formatter->format($record));
......
......@@ -45,7 +45,8 @@ class Collection
'Dashboard',
'ExamplePluginTemplate',
'CustomAlerts',
'Insights'
'Insights',
'LogViewer',
);
/**
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter