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
diff options
context:
space:
mode:
authorBenaka Moorthi <benaka.moorthi@gmail.com>2013-09-27 16:00:47 +0400
committerBenaka Moorthi <benaka.moorthi@gmail.com>2013-09-27 16:00:47 +0400
commit5657acb8d378471fbfe4606313e760b495f6aecb (patch)
treeb0669c8e19da1592fee1b7e9f9ee268b2578b422
parent77f606bb847c4bd4e4dff7dade09d6d60476a59b (diff)
Use tag concept instead of plugin when logging and default to calling class name when plugin can't be determined.
-rw-r--r--core/Db/Schema/Myisam.php2
-rw-r--r--core/Error.php6
-rw-r--r--core/ExceptionHandler.php6
-rw-r--r--core/Log.php71
-rw-r--r--core/Updates/2.0-a7.php4
-rw-r--r--tests/PHPUnit/Core/LogTest.php32
6 files changed, 69 insertions, 52 deletions
diff --git a/core/Db/Schema/Myisam.php b/core/Db/Schema/Myisam.php
index 990b1289b5..f9dc5faa1a 100644
--- a/core/Db/Schema/Myisam.php
+++ b/core/Db/Schema/Myisam.php
@@ -127,7 +127,7 @@ class Myisam implements SchemaInterface
'logger_message' => "CREATE TABLE {$prefixTables}logger_message (
idlogger_message INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
- plugin VARCHAR(50) NULL,
+ tag VARCHAR(50) NULL,
timestamp TIMESTAMP NULL,
level TINYINT NULL,
message TEXT NULL,
diff --git a/core/Error.php b/core/Error.php
index 02e8d1fcdc..b186cdd731 100644
--- a/core/Error.php
+++ b/core/Error.php
@@ -117,17 +117,17 @@ class Error
}
}
- public static function formatFileAndDBLogMessage(&$message, $level, $pluginName, $datetime, $log)
+ public static function formatFileAndDBLogMessage(&$message, $level, $tag, $datetime, $log)
{
if ($message instanceof Error) {
$message = $message->errfile . '(' . $message->errline . '): ' . $message->getErrNoString()
. ' - ' . $message->errstr . "\n" . $message->backtrace;
- $message = $log->formatMessage($level, $pluginName, $datetime, $message);
+ $message = $log->formatMessage($level, $tag, $datetime, $message);
}
}
- public static function formatScreenMessage(&$message, $level, $pluginName, $datetime, $log)
+ public static function formatScreenMessage(&$message, $level, $tag, $datetime, $log)
{
if ($message instanceof Error) {
$errno = $message->errno & error_reporting();
diff --git a/core/ExceptionHandler.php b/core/ExceptionHandler.php
index b070766db8..5fccfe82e2 100644
--- a/core/ExceptionHandler.php
+++ b/core/ExceptionHandler.php
@@ -39,17 +39,17 @@ class ExceptionHandler
set_exception_handler(array('\\Piwik\\ExceptionHandler', 'exceptionHandler'));
}
- public static function formatFileAndDBLogMessage(&$message, $level, $pluginName, $datetime, $log)
+ public static function formatFileAndDBLogMessage(&$message, $level, $tag, $datetime, $log)
{
if ($message instanceof \Exception) {
$message = sprintf("%s(%d): %s\n%s", $message->getFile(), $message->getLine(), $message->getMessage(),
self::$debugBacktraceForTests ?: $message->getTraceAsString());
- $message = $log->formatMessage($level, $pluginName, $datetime, $message);
+ $message = $log->formatMessage($level, $tag, $datetime, $message);
}
}
- public static function formatScreenMessage(&$message, $level, $pluginName, $datetime, $log)
+ public static function formatScreenMessage(&$message, $level, $tag, $datetime, $log)
{
if ($message instanceof \Exception) {
if (!Common::isPhpCliMode()) {
diff --git a/core/Log.php b/core/Log.php
index 287b5c7f8e..8aa989e450 100644
--- a/core/Log.php
+++ b/core/Log.php
@@ -47,7 +47,7 @@ class Log
* This event is called when trying to log an object to a file. Plugins can use
* this event to convert objects to strings before they are logged.
*
- * Callback signature: function (&$message, $level, $pluginName, $datetime, $logger)
+ * Callback signature: function (&$message, $level, $tag, $datetime, $logger)
*
* The $message parameter is the object that is being logged. Event handlers should
* check if the object is of a certain type and if it is, set $message to the
@@ -59,7 +59,7 @@ class Log
* This event is called when trying to log an object to the screen. Plugins can use
* this event to convert objects to strings before they are logged.
*
- * Callback signature: function (&$message, $level, $pluginName, $datetiem, $logger)
+ * Callback signature: function (&$message, $level, $tag, $datetiem, $logger)
*
* The $message parameter is the object that is being logged. Event handlers should
* check if the object is of a certain type and if it is, set $message to the
@@ -71,7 +71,7 @@ class Log
* This event is called when trying to log an object to a database table. Plugins can use
* this event to convert objects to strings before they are logged.
*
- * Callback signature: function (&$message, $level, $pluginName, $datetiem, $logger)
+ * Callback signature: function (&$message, $level, $tag, $datetiem, $logger)
*
* The $message parameter is the object that is being logged. Event handlers should
* check if the object is of a certain type and if it is, set $message to the
@@ -125,12 +125,12 @@ class Log
private $writers = array();
/**
- * The log message format string that turns a plugin name, date-time and message into
+ * The log message format string that turns a tag name, date-time and message into
* one string to log.
*
* @var string
*/
- private $logMessageFormat = "[%pluginName%:%datetime%] %message%";
+ private $logMessageFormat = "[%tag%:%datetime%] %message%";
/**
* If we're logging to a file, this is the path to the file to log to.
@@ -218,24 +218,24 @@ class Log
}
/**
- * Creates log message combining logging info including a log level, plugin name,
+ * Creates log message combining logging info including a log level, tag name,
* date time, and caller provided log message. The log message can be set through
* the string_message_format ini option in the [log] section. By default it will
* create log messages like:
*
- * [plugin:datetime] log message
+ * [tag:datetime] log message
*
* @param int $level
- * @param string $pluginName
+ * @param string $tag
* @param string $datetime
* @param string $message
* @return string
*/
- public function formatMessage($level, $pluginName, $datetime, $message)
+ public function formatMessage($level, $tag, $datetime, $message)
{
return str_replace(
- array("%pluginName%", "%message%", "%datetime%", "%level%"),
- array($pluginName, $message, $datetime, $this->getStringLevel($level)),
+ array("%tag%", "%message%", "%datetime%", "%level%"),
+ array($tag, $message, $datetime, $this->getStringLevel($level)),
$this->logMessageFormat
);
}
@@ -303,12 +303,12 @@ class Log
return $writer;
}
- private function logToFile($level, $pluginName, $datetime, $message)
+ private function logToFile($level, $tag, $datetime, $message)
{
if (is_string($message)) {
- $message = $this->formatMessage($level, $pluginName, $datetime, $message);
+ $message = $this->formatMessage($level, $tag, $datetime, $message);
} else {
- Piwik_PostEvent(self::FORMAT_FILE_MESSAGE_EVENT, array(&$message, $level, $pluginName, $datetime, $this));
+ Piwik_PostEvent(self::FORMAT_FILE_MESSAGE_EVENT, array(&$message, $level, $tag, $datetime, $this));
}
if (empty($message)) {
@@ -318,12 +318,12 @@ class Log
file_put_contents($this->logToFilePath, $message . "\n", FILE_APPEND);
}
- private function logToScreen($level, $pluginName, $datetime, $message)
+ private function logToScreen($level, $tag, $datetime, $message)
{
if (is_string($message)) {
- $message = '<pre>' . $this->formatMessage($level, $pluginName, $datetime, $message) . '</pre>';
+ $message = '<pre>' . $this->formatMessage($level, $tag, $datetime, $message) . '</pre>';
} else {
- Piwik_PostEvent(self::FORMAT_SCREEN_MESSAGE_EVENT, array(&$message, $level, $pluginName, $datetime, $this));
+ Piwik_PostEvent(self::FORMAT_SCREEN_MESSAGE_EVENT, array(&$message, $level, $tag, $datetime, $this));
}
if (empty($message)) {
@@ -333,12 +333,12 @@ class Log
echo $message . "\n";
}
- private function logToDatabase($level, $pluginName, $datetime, $message)
+ private function logToDatabase($level, $tag, $datetime, $message)
{
if (is_string($message)) {
- $message = $this->formatMessage($level, $pluginName, $datetime, $message);
+ $message = $this->formatMessage($level, $tag, $datetime, $message);
} else {
- Piwik_PostEvent(self::FORMAT_DATABASE_MESSAGE_EVENT, array(&$message, $level, $pluginName, $datetime, $this));
+ Piwik_PostEvent(self::FORMAT_DATABASE_MESSAGE_EVENT, array(&$message, $level, $tag, $datetime, $this));
}
if (empty($message)) {
@@ -346,9 +346,9 @@ class Log
}
$sql = "INSERT INTO " . Common::prefixTable('logger_message')
- . " (plugin, timestamp, level, message)"
+ . " (tag, timestamp, level, message)"
. " VALUES (?, ?, ?, ?)";
- Db::query($sql, array($pluginName, $datetime, $level, (string)$message));
+ Db::query($sql, array($tag, $datetime, $level, (string)$message));
}
private function doLog($level, $message, $sprintfParams = array())
@@ -362,23 +362,28 @@ class Log
}
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
- $pluginName = Plugin::getPluginNameFromBacktrace($backtrace);
+ $tag = Plugin::getPluginNameFromBacktrace($backtrace);
- $this->writeMessage($level, $pluginName, $datetime, $message);
+ // if we can't determine the plugin, use the name of the calling class
+ if ($tag == false) {
+ $tag = $this->getClassNameThatIsLogging($backtrace);
+ }
+
+ $this->writeMessage($level, $tag, $datetime, $message);
}
}
- private function writeMessage($level, $pluginName, $datetime, $message)
+ private function writeMessage($level, $tag, $datetime, $message)
{
foreach ($this->writers as $writer) {
- call_user_func($writer, $level, $pluginName, $datetime, $message);
+ call_user_func($writer, $level, $tag, $datetime, $message);
}
// errors are always printed to screen
if ($level == self::ERROR
&& !$this->loggingToScreen
) {
- $this->logToScreen($level, $pluginName, $datetime, $message);
+ $this->logToScreen($level, $tag, $datetime, $message);
}
}
@@ -445,4 +450,16 @@ class Log
);
return $levelToName[$level];
}
+
+ private function getClassNameThatIsLogging($backtrace)
+ {
+ foreach ($backtrace as $tracepoint) {
+ if (isset($tracepoint['class'])
+ && $tracepoint['class'] != "Piwik\\Log"
+ ) {
+ return $tracepoint['class'];
+ }
+ }
+ return false;
+ }
} \ No newline at end of file
diff --git a/core/Updates/2.0-a7.php b/core/Updates/2.0-a7.php
index 9674f85eaa..2391476d1b 100644
--- a/core/Updates/2.0-a7.php
+++ b/core/Updates/2.0-a7.php
@@ -22,7 +22,7 @@ class Piwik_Updates_2_0_a7 extends Updates
return array(
// ignore existing column name error (1060)
'ALTER TABLE ' . Common::prefixTable('logger_message')
- . " ADD COLUMN plugin VARCHAR(50) NULL AFTER idlogger_message" => 1060,
+ . " ADD COLUMN tag VARCHAR(50) NULL AFTER idlogger_message" => 1060,
'ALTER TABLE ' . Common::prefixTable('logger_message')
. " ADD COLUMN level TINYINT AFTER timestamp" => 1060,
@@ -31,7 +31,7 @@ class Piwik_Updates_2_0_a7 extends Updates
static function update()
{
- // add plugin & level columns to logger_message table
+ // add tag & level columns to logger_message table
Updater::updateDatabase(__FILE__, self::getSql());
}
}
diff --git a/tests/PHPUnit/Core/LogTest.php b/tests/PHPUnit/Core/LogTest.php
index 75ec6b37d1..1ae78c63a3 100644
--- a/tests/PHPUnit/Core/LogTest.php
+++ b/tests/PHPUnit/Core/LogTest.php
@@ -18,16 +18,16 @@ use Piwik\Plugins\TestPlugin\TestLoggingUtility;
class LogTest extends DatabaseTestCase
{
const TESTMESSAGE = 'test%smessage';
- const STRING_MESSAGE_FORMAT = '[%pluginName%] %message%';
+ const STRING_MESSAGE_FORMAT = '[%tag%] %message%';
const STRING_MESSAGE_FORMAT_SPRINTF = "[%s] %s";
public static $expectedExceptionOutput = array(
'screen' => 'dummy error message<br />
<br />
--&gt; To temporarily debug this error further, set const DISPLAY_BACKTRACE_DEBUG=true; in ResponseBuilder.php',
- 'file' => '[] LogTest.php(156): dummy error message
+ 'file' => '[LogTest] LogTest.php(156): dummy error message
dummy backtrace',
- 'database' => '[] LogTest.php(156): dummy error message
+ 'database' => '[LogTest] LogTest.php(156): dummy error message
dummy backtrace'
);
@@ -40,9 +40,9 @@ dummy backtrace'
<br /><br />Backtrace --&gt;<div style="font-family:Courier;font-size:10pt"><br />
dummy backtrace</div><br />
</pre></div><br />',
- 'file' => '[] dummyerrorfile.php(145): Unknown error (102) - dummy error string
+ 'file' => '[LogTest] dummyerrorfile.php(145): Unknown error (102) - dummy error string
dummy backtrace',
- 'database' => '[] dummyerrorfile.php(145): Unknown error (102) - dummy error string
+ 'database' => '[LogTest] dummyerrorfile.php(145): Unknown error (102) - dummy error string
dummy backtrace'
);
@@ -104,7 +104,7 @@ dummy backtrace'
$this->screenOutput = ob_get_contents();
ob_end_clean();
- $this->checkBackend($backend, self::TESTMESSAGE, $formatMessage = true);
+ $this->checkBackend($backend, self::TESTMESSAGE, $formatMessage = true, $tag = 'LogTest');
}
/**
@@ -121,7 +121,7 @@ dummy backtrace'
$this->screenOutput = ob_get_contents();
ob_end_clean();
- $this->checkBackend($backend, sprintf(self::TESTMESSAGE, " subst "), $formatMessage = true);
+ $this->checkBackend($backend, sprintf(self::TESTMESSAGE, " subst "), $formatMessage = true, $tag = 'LogTest');
}
/**
@@ -139,7 +139,7 @@ dummy backtrace'
$this->screenOutput = ob_get_contents();
ob_end_clean();
- $this->checkBackend($backend, self::$expectedErrorOutput[$backend]);
+ $this->checkBackend($backend, self::$expectedErrorOutput[$backend], $formatMessage = false, $tag = 'LogTest');
$this->checkBackend('screen', self::$expectedErrorOutput['screen']); // errors should always written to the screen
}
@@ -158,7 +158,7 @@ dummy backtrace'
$this->screenOutput = ob_get_contents();
ob_end_clean();
- $this->checkBackend($backend, self::$expectedExceptionOutput[$backend]);
+ $this->checkBackend($backend, self::$expectedExceptionOutput[$backend], $formatMessage = false, $tag = 'LogTest');
$this->checkBackend('screen', self::$expectedExceptionOutput['screen']); // errors should always written to the screen
}
@@ -176,7 +176,7 @@ dummy backtrace'
$this->screenOutput = ob_get_contents();
ob_end_clean();
- $this->checkBackend($backend, self::TESTMESSAGE, $formatMessage = true, $plugin = 'TestPlugin');
+ $this->checkBackend($backend, self::TESTMESSAGE, $formatMessage = true, $tag = 'TestPlugin');
}
/**
@@ -196,10 +196,10 @@ dummy backtrace'
$this->checkNoMessagesLogged($backend);
}
- private function checkBackend($backend, $expectedMessage, $formatMessage = false, $plugin = false)
+ private function checkBackend($backend, $expectedMessage, $formatMessage = false, $tag = false)
{
if ($formatMessage) {
- $expectedMessage = sprintf(self::STRING_MESSAGE_FORMAT_SPRINTF, $plugin, $expectedMessage);
+ $expectedMessage = sprintf(self::STRING_MESSAGE_FORMAT_SPRINTF, $tag, $expectedMessage);
}
if ($backend == 'screen') {
@@ -225,11 +225,11 @@ dummy backtrace'
$message = $this->removePathsFromBacktrace($message);
$this->assertEquals($expectedMessage, $message);
- $pluginInDb = Db::fetchOne("SELECT plugin FROM " . Common::prefixTable('logger_message') . " LIMIT 1");
- if ($plugin === false) {
- $this->assertEmpty($pluginInDb);
+ $tagInDb = Db::fetchOne("SELECT tag FROM " . Common::prefixTable('logger_message') . " LIMIT 1");
+ if ($tag === false) {
+ $this->assertEmpty($tagInDb);
} else {
- $this->assertEquals($plugin, $pluginInDb);
+ $this->assertEquals($tag, $tagInDb);
}
}
}