Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMatthieu Napoli <matthieu@mnapoli.fr>2014-12-01 05:43:03 +0300
committerMatthieu Napoli <matthieu@mnapoli.fr>2014-12-01 05:51:37 +0300
commit0794be0d5551998b683ac934e00604d277fe69e9 (patch)
tree26a43fbc68f219fc6116ceebfed132ad1c9107dd /core
parentf1fae09be4507bd9dedfc949deab98108b47b23e (diff)
#6622 Logger refactoring: use a "record" array similar to Monolog to ease future transition
Diffstat (limited to 'core')
-rw-r--r--core/Log.php36
-rw-r--r--core/Log/Backend/Backend.php30
-rw-r--r--core/Log/Backend/DatabaseBackend.php6
-rw-r--r--core/Log/Backend/FileBackend.php4
-rw-r--r--core/Log/Backend/StdErrBackend.php6
-rw-r--r--core/Log/Backend/StdOutBackend.php6
-rw-r--r--core/Log/Formatter/AddRequestIdFormatter.php12
-rw-r--r--core/Log/Formatter/ErrorHtmlFormatter.php10
-rw-r--r--core/Log/Formatter/ErrorTextFormatter.php8
-rw-r--r--core/Log/Formatter/ExceptionHtmlFormatter.php10
-rw-r--r--core/Log/Formatter/ExceptionTextFormatter.php8
-rw-r--r--core/Log/Formatter/Formatter.php15
-rw-r--r--core/Log/Formatter/HtmlPreFormatter.php13
-rw-r--r--core/Log/Formatter/LineMessageFormatter.php23
-rw-r--r--core/Log/Processor/SprintfProcessor.php9
15 files changed, 103 insertions, 93 deletions
diff --git a/core/Log.php b/core/Log.php
index 4091fa532d..f759b351d7 100644
--- a/core/Log.php
+++ b/core/Log.php
@@ -244,25 +244,36 @@ class Log extends Singleton
return $this->currentLogLevel;
}
- private function doLog($level, $message, $sprintfParams = array())
+ private function doLog($level, $message, $parameters = array())
{
if (!$this->shouldLoggerLog($level)) {
return;
}
+ // Create a record similar to Monolog to ease future transition
+ $record = array(
+ 'message' => $message,
+ 'context' => $parameters,
+ 'channel' => 'piwik',
+ 'level' => $level,
+ 'level_name' => self::getStringLevel($level),
+ 'time' => new \DateTime(),
+ 'extra' => array(),
+ );
+
foreach ($this->processors as $processor) {
- $message = $processor($message, $sprintfParams, $level);
+ $record = $processor($record);
}
- $tag = $this->getLoggingClassName();
+ $record['extra']['class'] = $this->getLoggingClassName();
- $this->writeMessage($level, $tag, date("Y-m-d H:i:s"), $message);
+ $this->writeMessage($record, date("Y-m-d H:i:s"));
}
- private function writeMessage($level, $tag, $datetime, $message)
+ private function writeMessage(array $record)
{
foreach ($this->writers as $writer) {
- call_user_func($writer, $level, $tag, $datetime, $message, $this);
+ call_user_func($writer, $record, $this);
}
}
@@ -312,4 +323,17 @@ class Log extends Singleton
}
return $tag;
}
+
+ private function getStringLevel($level)
+ {
+ static $levelToName = array(
+ Log::NONE => 'NONE',
+ Log::ERROR => 'ERROR',
+ Log::WARN => 'WARN',
+ Log::INFO => 'INFO',
+ Log::DEBUG => 'DEBUG',
+ Log::VERBOSE => 'VERBOSE'
+ );
+ return $levelToName[$level];
+ }
}
diff --git a/core/Log/Backend/Backend.php b/core/Log/Backend/Backend.php
index e5e77753de..0b25316c4d 100644
--- a/core/Log/Backend/Backend.php
+++ b/core/Log/Backend/Backend.php
@@ -26,33 +26,25 @@ abstract class Backend
$this->formatter = $formatter;
}
- public abstract function __invoke($level, $tag, $datetime, $message, Log $logger);
+ /**
+ * Write the log record to the backend.
+ *
+ * @param array $record
+ * @param Log $logger
+ */
+ public abstract function __invoke(array $record, Log $logger);
/**
* Formats the log message using the configured formatter.
*
- * @param int $level
- * @param string $tag
- * @param string $datetime
- * @param string $message
+ * @param array $record
* @param Log $logger
* @return string
*/
- protected function formatMessage($level, $tag, $datetime, $message, Log $logger)
+ protected function formatMessage(array $record, Log $logger)
{
- return trim($this->formatter->format($message, $level, $tag, $datetime, $logger));
- }
+ $record = $this->formatter->format($record, $logger);
- protected function getStringLevel($level)
- {
- static $levelToName = array(
- Log::NONE => 'NONE',
- Log::ERROR => 'ERROR',
- Log::WARN => 'WARN',
- Log::INFO => 'INFO',
- Log::DEBUG => 'DEBUG',
- Log::VERBOSE => 'VERBOSE'
- );
- return $levelToName[$level];
+ return trim($record['message']);
}
}
diff --git a/core/Log/Backend/DatabaseBackend.php b/core/Log/Backend/DatabaseBackend.php
index 5c7e8710bb..0dc707df78 100644
--- a/core/Log/Backend/DatabaseBackend.php
+++ b/core/Log/Backend/DatabaseBackend.php
@@ -17,9 +17,9 @@ use Piwik\Log;
*/
class DatabaseBackend extends Backend
{
- public function __invoke($level, $tag, $datetime, $message, Log $logger)
+ public function __invoke(array $record, Log $logger)
{
- $message = $this->formatMessage($level, $tag, $datetime, $message, $logger);
+ $message = $this->formatMessage($record, $logger);
if (empty($message)) {
return;
@@ -29,6 +29,6 @@ class DatabaseBackend extends Backend
. " (tag, timestamp, level, message)"
. " VALUES (?, ?, ?, ?)";
- Db::query($sql, array($tag, $datetime, self::getStringLevel($level), (string)$message));
+ Db::query($sql, array($record['extra']['class'], $record['time']->format('Y-m-d H:i:s'), $record['level_name'], (string) $message));
}
}
diff --git a/core/Log/Backend/FileBackend.php b/core/Log/Backend/FileBackend.php
index 6759827a77..2ffcea1e41 100644
--- a/core/Log/Backend/FileBackend.php
+++ b/core/Log/Backend/FileBackend.php
@@ -31,9 +31,9 @@ class FileBackend extends Backend
parent::__construct($formatter);
}
- public function __invoke($level, $tag, $datetime, $message, Log $logger)
+ public function __invoke(array $record, Log $logger)
{
- $message = $this->formatMessage($level, $tag, $datetime, $message, $logger);
+ $message = $this->formatMessage($record, $logger);
$message = str_replace("\n", "\n ", $message) . "\n";
if (!@file_put_contents($this->logToFilePath, $message, FILE_APPEND)
diff --git a/core/Log/Backend/StdErrBackend.php b/core/Log/Backend/StdErrBackend.php
index c2ef47cc75..8f8bb00252 100644
--- a/core/Log/Backend/StdErrBackend.php
+++ b/core/Log/Backend/StdErrBackend.php
@@ -28,13 +28,13 @@ class StdErrBackend extends Backend
parent::__construct($formatter);
}
- public function __invoke($level, $tag, $datetime, $message, Log $logger)
+ public function __invoke(array $record, Log $logger)
{
- if ($level != Log::ERROR) {
+ if ($record['level'] != Log::ERROR) {
return;
}
- $message = $this->formatMessage($level, $tag, $datetime, $message, $logger) . "\n";
+ $message = $this->formatMessage($record, $logger) . "\n";
// Do not log on stderr during tests (prevent display of errors in CI output)
if (! defined('PIWIK_TEST_MODE')) {
diff --git a/core/Log/Backend/StdOutBackend.php b/core/Log/Backend/StdOutBackend.php
index 2429289404..fd0a89c5ec 100644
--- a/core/Log/Backend/StdOutBackend.php
+++ b/core/Log/Backend/StdOutBackend.php
@@ -15,10 +15,8 @@ use Piwik\Log;
*/
class StdOutBackend extends Backend
{
- public function __invoke($level, $tag, $datetime, $message, Log $logger)
+ public function __invoke(array $record, Log $logger)
{
- $message = $this->formatMessage($level, $tag, $datetime, $message, $logger);
-
- echo $message . "\n";
+ echo $this->formatMessage($record, $logger) . "\n";
}
}
diff --git a/core/Log/Formatter/AddRequestIdFormatter.php b/core/Log/Formatter/AddRequestIdFormatter.php
index ee061d1d0d..3de87af71f 100644
--- a/core/Log/Formatter/AddRequestIdFormatter.php
+++ b/core/Log/Formatter/AddRequestIdFormatter.php
@@ -16,7 +16,7 @@ use Piwik\Log;
*/
class AddRequestIdFormatter extends Formatter
{
- public function format($message, $level, $tag, $datetime, Log $logger)
+ public function format(array $record, Log $logger)
{
static $currentRequestKey;
@@ -24,17 +24,17 @@ class AddRequestIdFormatter extends Formatter
$currentRequestKey = substr(Common::generateUniqId(), 0, 5);
}
- $message = $this->next($message, $level, $tag, $datetime, $logger);
+ $record = $this->next($record, $logger);
- if (! is_string($message)) {
- return $message;
+ if (! is_string($record['message'])) {
+ return $record;
}
// Decorate the error message with the "request id"
if (!defined('PIWIK_TEST_MODE')) {
- $message = '[' . $currentRequestKey . '] ' . $message;
+ $record['message'] = '[' . $currentRequestKey . '] ' . $record['message'];
}
- return $message;
+ return $record;
}
}
diff --git a/core/Log/Formatter/ErrorHtmlFormatter.php b/core/Log/Formatter/ErrorHtmlFormatter.php
index 210af8b71f..f499df9b10 100644
--- a/core/Log/Formatter/ErrorHtmlFormatter.php
+++ b/core/Log/Formatter/ErrorHtmlFormatter.php
@@ -18,10 +18,12 @@ use Piwik\Version;
*/
class ErrorHtmlFormatter extends Formatter
{
- public function format($message, $level, $tag, $datetime, Log $logger)
+ public function format(array $record, Log $logger)
{
+ $message = $record['message'];
+
if (! $message instanceof Error) {
- return $this->next($message, $level, $tag, $datetime, $logger);
+ return $this->next($record, $logger);
}
$errno = $message->errno & error_reporting();
@@ -50,6 +52,8 @@ class ErrorHtmlFormatter extends Formatter
$html .= "</div><br />";
$html .= "\n </pre></div><br />";
- return $html;
+ $record['message'] = $html;
+
+ return $record;
}
}
diff --git a/core/Log/Formatter/ErrorTextFormatter.php b/core/Log/Formatter/ErrorTextFormatter.php
index 6cfb5739b7..e2651ad638 100644
--- a/core/Log/Formatter/ErrorTextFormatter.php
+++ b/core/Log/Formatter/ErrorTextFormatter.php
@@ -16,13 +16,15 @@ use Piwik\Log;
*/
class ErrorTextFormatter extends Formatter
{
- public function format($message, $level, $tag, $datetime, Log $logger)
+ public function format(array $record, Log $logger)
{
+ $message = $record['message'];
+
if ($message instanceof Error) {
- $message = $message->errfile . '(' . $message->errline . '): ' . Error::getErrNoString($message->errno)
+ $record['message'] = $message->errfile . '(' . $message->errline . '): ' . Error::getErrNoString($message->errno)
. ' - ' . $message->errstr . "\n" . $message->backtrace;
}
- return $this->next($message, $level, $tag, $datetime, $logger);
+ return $this->next($record, $logger);
}
}
diff --git a/core/Log/Formatter/ExceptionHtmlFormatter.php b/core/Log/Formatter/ExceptionHtmlFormatter.php
index 309dbafe7f..5be62bcb67 100644
--- a/core/Log/Formatter/ExceptionHtmlFormatter.php
+++ b/core/Log/Formatter/ExceptionHtmlFormatter.php
@@ -17,10 +17,10 @@ use Piwik\Log;
*/
class ExceptionHtmlFormatter extends Formatter
{
- public function format($message, $level, $tag, $datetime, Log $logger)
+ public function format(array $record, Log $logger)
{
- if (! $message instanceof \Exception) {
- return $this->next($message, $level, $tag, $datetime, $logger);
+ if (! $record['message'] instanceof \Exception) {
+ return $this->next($record, $logger);
}
Common::sendHeader('Content-Type: text/html; charset=utf-8');
@@ -28,6 +28,8 @@ class ExceptionHtmlFormatter extends Formatter
$outputFormat = strtolower(Common::getRequestVar('format', 'html', 'string'));
$response = new ResponseBuilder($outputFormat);
- return $response->getResponseException(new \Exception($message->getMessage()));
+ $record['message'] = $response->getResponseException(new \Exception($record['message']->getMessage()));
+
+ return $record;
}
}
diff --git a/core/Log/Formatter/ExceptionTextFormatter.php b/core/Log/Formatter/ExceptionTextFormatter.php
index 0fcf5f6ea2..1e0bd0ed12 100644
--- a/core/Log/Formatter/ExceptionTextFormatter.php
+++ b/core/Log/Formatter/ExceptionTextFormatter.php
@@ -16,13 +16,15 @@ use Piwik\Log;
*/
class ExceptionTextFormatter extends Formatter
{
- public function format($message, $level, $tag, $datetime, Log $logger)
+ public function format(array $record, Log $logger)
{
+ $message = $record['message'];
+
if ($message instanceof \Exception) {
- $message = sprintf("%s(%d): %s\n%s", $message->getFile(), $message->getLine(), $message->getMessage(),
+ $record['message'] = sprintf("%s(%d): %s\n%s", $message->getFile(), $message->getLine(), $message->getMessage(),
ExceptionHandler::$debugBacktraceForTests ?: $message->getTraceAsString());
}
- return $this->next($message, $level, $tag, $datetime, $logger);
+ return $this->next($record, $logger);
}
}
diff --git a/core/Log/Formatter/Formatter.php b/core/Log/Formatter/Formatter.php
index 47d501e247..66de41423c 100644
--- a/core/Log/Formatter/Formatter.php
+++ b/core/Log/Formatter/Formatter.php
@@ -24,15 +24,12 @@ abstract class Formatter
protected $next;
/**
- * @param mixed $message Log message.
- * @param int $level The log level used with this log entry.
- * @param string $tag The current plugin that started logging (or if no plugin, the current class).
- * @param string $datetime Datetime of the logging call.
+ * @param array $record
* @param Log $logger
*
- * @return mixed
+ * @return array Updated record.
*/
- public abstract function format($message, $level, $tag, $datetime, Log $logger);
+ public abstract function format(array $record, Log $logger);
/**
* Chain of responsibility pattern.
@@ -44,12 +41,12 @@ abstract class Formatter
$this->next = $formatter;
}
- protected function next($message, $level, $tag, $datetime, Log $logger)
+ protected function next(array $record, Log $logger)
{
if (! $this->next) {
- return $message;
+ return $record;
}
- return $this->next->format($message, $level, $tag, $datetime, $logger);
+ return $this->next->format($record, $logger);
}
}
diff --git a/core/Log/Formatter/HtmlPreFormatter.php b/core/Log/Formatter/HtmlPreFormatter.php
index e8c095c047..ecc52fc149 100644
--- a/core/Log/Formatter/HtmlPreFormatter.php
+++ b/core/Log/Formatter/HtmlPreFormatter.php
@@ -16,19 +16,18 @@ use Piwik\Log;
*/
class HtmlPreFormatter extends Formatter
{
- public function format($message, $level, $tag, $datetime, Log $logger)
+ public function format(array $record, Log $logger)
{
- $message = $this->next($message, $level, $tag, $datetime, $logger);
+ $record = $this->next($record, $logger);
- if (! is_string($message)) {
- return $message;
+ if (! is_string($record['message'])) {
+ return $record;
}
if (!Common::isPhpCliMode()) {
- $message = Common::sanitizeInputValue($message);
- $message = '<pre>' . $message . '</pre>';
+ $record['message'] = '<pre>' . Common::sanitizeInputValue($record['message']) . '</pre>';
}
- return $message;
+ return $record;
}
}
diff --git a/core/Log/Formatter/LineMessageFormatter.php b/core/Log/Formatter/LineMessageFormatter.php
index 87bc54dfa1..4b778f858a 100644
--- a/core/Log/Formatter/LineMessageFormatter.php
+++ b/core/Log/Formatter/LineMessageFormatter.php
@@ -28,31 +28,18 @@ class LineMessageFormatter extends Formatter
$this->logMessageFormat = $logMessageFormat;
}
- public function format($message, $level, $tag, $datetime, Log $logger)
+ public function format(array $record, Log $logger)
{
- if (! is_string($message)) {
+ if (! is_string($record['message'])) {
throw new \InvalidArgumentException('Trying to log a message that is not a string');
}
- $message = str_replace(
+ $record['message'] = str_replace(
array("%tag%", "%message%", "%datetime%", "%level%"),
- array($tag, trim($message), $datetime, $this->getStringLevel($level)),
+ array($record['extra']['class'], trim($record['message']), $record['time']->format('Y-m-d H:i:s'), $record['level_name']),
$this->logMessageFormat
);
- return $this->next($message, $level, $tag, $datetime, $logger);
- }
-
- private function getStringLevel($level)
- {
- static $levelToName = array(
- Log::NONE => 'NONE',
- Log::ERROR => 'ERROR',
- Log::WARN => 'WARN',
- Log::INFO => 'INFO',
- Log::DEBUG => 'DEBUG',
- Log::VERBOSE => 'VERBOSE'
- );
- return $levelToName[$level];
+ return $this->next($record, $logger);
}
}
diff --git a/core/Log/Processor/SprintfProcessor.php b/core/Log/Processor/SprintfProcessor.php
index 8ec0d61db2..9032f5ba7a 100644
--- a/core/Log/Processor/SprintfProcessor.php
+++ b/core/Log/Processor/SprintfProcessor.php
@@ -13,15 +13,18 @@ namespace Piwik\Log\Processor;
*/
class SprintfProcessor
{
- public function __invoke($message, array $parameters = array(), $level)
+ public function __invoke(array $record)
{
+ $message = $record['message'];
+ $parameters = $record['context'];
+
if (is_string($message) && !empty($parameters)) {
$parameters = $this->ensureParametersAreStrings($parameters);
- $message = vsprintf($message, $parameters);
+ $record['message'] = vsprintf($message, $parameters);
}
- return $message;
+ return $record;
}
private function ensureParametersAreStrings(array $parameters)