/core/Log/Error.php

https://github.com/quarkness/piwik · PHP · 119 lines · 78 code · 10 blank · 31 comment · 2 complexity · 826d2e69de88c84b212c82d1a7c0a3a0 MD5 · raw file

  1. <?php
  2. /**
  3. * Piwik - Open source web analytics
  4. *
  5. * @link http://piwik.org
  6. * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  7. * @version $Id$
  8. *
  9. * @category Piwik
  10. * @package Piwik
  11. */
  12. /**
  13. * Class used to log an error event.
  14. *
  15. * @package Piwik
  16. * @subpackage Piwik_Log
  17. */
  18. class Piwik_Log_Error extends Piwik_Log
  19. {
  20. const ID = 'logger_error';
  21. function __construct()
  22. {
  23. $logToFileFilename = self::ID;
  24. $logToDatabaseTableName = self::ID;
  25. $logToDatabaseColumnMapping = null;
  26. $screenFormatter = new Piwik_Log_Error_Formatter_ScreenFormatter();
  27. $fileFormatter = new Piwik_Log_Formatter_FileFormatter();
  28. parent::__construct($logToFileFilename,
  29. $fileFormatter,
  30. $screenFormatter,
  31. $logToDatabaseTableName,
  32. $logToDatabaseColumnMapping );
  33. }
  34. function addWriteToScreen()
  35. {
  36. parent::addWriteToScreen();
  37. $writerScreen = new Zend_Log_Writer_Stream('php://stderr');
  38. $writerScreen->setFormatter( $this->screenFormatter );
  39. $this->addWriter($writerScreen);
  40. }
  41. public function logEvent($errno, $errstr, $errfile, $errline, $backtrace)
  42. {
  43. $event = array();
  44. $event['errno'] = $errno;
  45. $event['message'] = $errstr;
  46. $event['errfile'] = $errfile;
  47. $event['errline'] = $errline;
  48. $event['backtrace'] = $backtrace;
  49. parent::log($event, Piwik_Log::ERR, null);
  50. }
  51. }
  52. /**
  53. * Format an error event to be displayed on the screen.
  54. *
  55. * @package Piwik
  56. * @subpackage Piwik_Log
  57. */
  58. class Piwik_Log_Error_Formatter_ScreenFormatter extends Piwik_Log_Formatter_ScreenFormatter
  59. {
  60. /**
  61. * Formats data into a single line to be written by the writer.
  62. *
  63. * @param array $event event data
  64. * @return string formatted line to write to the log
  65. */
  66. public function format($event)
  67. {
  68. $event = parent::formatEvent($event);
  69. $errno = $event['errno'] ;
  70. $errstr = $event['message'] ;
  71. $errfile = $event['errfile'] ;
  72. $errline = $event['errline'] ;
  73. $backtrace = $event['backtrace'] ;
  74. $strReturned = '';
  75. $errno = $errno & error_reporting();
  76. // problem when using error_reporting with the @ silent fail operator
  77. // it gives an errno 0, and in this case the objective is to NOT display anything on the screen!
  78. // is there any other case where the errno is zero at this point?
  79. if($errno == 0) return '';
  80. $strReturned .= "\n<div style='word-wrap: break-word; border: 3px solid red; padding:4px; width:70%; background-color:#FFFF96;'>
  81. <strong>There is an error. Please report the message and full backtrace in the <a href='?module=Proxy&action=redirect&url=http://forum.piwik.org' target='_blank'>Piwik forums</a> (please do a Search first as it might have been reported already!).<br /><br/>
  82. ";
  83. switch($errno)
  84. {
  85. case E_ERROR: $strReturned .= "Error"; break;
  86. case E_WARNING: $strReturned .= "Warning"; break;
  87. case E_PARSE: $strReturned .= "Parse Error"; break;
  88. case E_NOTICE: $strReturned .= "Notice"; break;
  89. case E_CORE_ERROR: $strReturned .= "Core Error"; break;
  90. case E_CORE_WARNING: $strReturned .= "Core Warning"; break;
  91. case E_COMPILE_ERROR: $strReturned .= "Compile Error"; break;
  92. case E_COMPILE_WARNING: $strReturned .= "Compile Warning"; break;
  93. case E_USER_ERROR: $strReturned .= "User Error"; break;
  94. case E_USER_WARNING: $strReturned .= "User Warning"; break;
  95. case E_USER_NOTICE: $strReturned .= "User Notice"; break;
  96. case E_STRICT: $strReturned .= "Strict Notice"; break;
  97. case E_RECOVERABLE_ERROR: $strReturned .= "Recoverable Error"; break;
  98. case E_DEPRECATED: $strReturned .= "Deprecated"; break;
  99. case E_USER_DEPRECATED: $strReturned .= "User Deprecated"; break;
  100. default: $strReturned .= "Unknown error ($errno)"; break;
  101. }
  102. $strReturned .= ":</strong> <i>$errstr</i> in <b>$errfile</b> on line <b>$errline</b>\n";
  103. $strReturned .= "<br /><br />Backtrace --&gt;<div style=\"font-family:Courier;font-size:10pt\">";
  104. $strReturned .= str_replace("\n", "<br />\n", $backtrace);
  105. $strReturned .= "</div><br />";
  106. $strReturned .= "\n </pre></div><br />";
  107. return parent::format($strReturned);
  108. }
  109. }