diff options
author | Benaka Moorthi <benaka.moorthi@gmail.com> | 2013-09-27 16:00:47 +0400 |
---|---|---|
committer | Benaka Moorthi <benaka.moorthi@gmail.com> | 2013-09-27 16:00:47 +0400 |
commit | 5657acb8d378471fbfe4606313e760b495f6aecb (patch) | |
tree | b0669c8e19da1592fee1b7e9f9ee268b2578b422 | |
parent | 77f606bb847c4bd4e4dff7dade09d6d60476a59b (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.php | 2 | ||||
-rw-r--r-- | core/Error.php | 6 | ||||
-rw-r--r-- | core/ExceptionHandler.php | 6 | ||||
-rw-r--r-- | core/Log.php | 71 | ||||
-rw-r--r-- | core/Updates/2.0-a7.php | 4 | ||||
-rw-r--r-- | tests/PHPUnit/Core/LogTest.php | 32 |
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 /> --> 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 --><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); } } } |