| eZ Components - Debug |
| ~~~~~~~~~~~~~~~~~~~~~ |
| |
| .. contents:: Table of Contents |
| |
| Introduction |
| ============ |
| |
| The Debug component provides an API to log and time debug events. This |
| component depends mainly on the EventLog component. The functionality of the |
| Debug component is divided into two parts: |
| |
| - Writing debug messages. |
| - Measuring the execution time. |
| |
| Writing a debug message is almost the same as writing a message with the |
| EventLog component. However, there is one major distinction: messages written |
| with the EventLog component are intended to be written to a storage element |
| (such as a log file or database). Messages written with the Debug component are |
| usually directly formatted and displayed. Note that the Debug::log() method has |
| a slightly different signature than the EventLog::log() method. |
| |
| Timing information is captured by starting and stopping timers using the public |
| methods from ezcDebug. The timing information is stored in a structure with raw |
| data. This structure should be formatted and displayed at the end of the |
| script. |
| |
| The Debug summary output can be formatted with an implementation from |
| ezcDebugOutputFormatter. The default, and currently only, formatter is |
| ezcDebugHtmlFormatter. This HTML formatter transforms the raw log |
| messages and raw timing information into a HTML string for display. |
| |
| |
| Class overview |
| ============== |
| |
| The following classes are the most important to use, extend or implement: |
| |
| ezcDebug |
| This provides the public API for writing Debug messages and capturing timing |
| information. |
| |
| ezcDebugOptions |
| Allows you to switch on debug stack traces and to configure their appearance. |
| |
| ezcDebugOutputFormatter |
| ezcDebugOutputFormatter provides an interface for the debug output |
| format. New implementations can format the raw log messages and timing |
| information to any output format. |
| |
| ezcDebugHtmlFormatter |
| ezcDebugHtmlFormatter is an implementation of the ezcDebugOutputFormatter |
| interface. This formatter reads the raw log and timing information and |
| returns it as an HTML string. This string can be output directly |
| to an HTML page. |
| |
| See the API documentation for more information. |
| |
| |
| Usage |
| ===== |
| |
| Writing a log message to file |
| ----------------------------- |
| |
| The following script writes a message to the Debug component. At the end of the |
| script, the log message is formatted and printed. |
| |
| .. include:: tutorial_log_message.php |
| :literal: |
| |
| Writing log messages is almost the same as writing them to the EventLog |
| component. As a matter of fact, the EventLog component is internally used by |
| Debug. |
| |
| Further information about writing log messages can be found in the EventLog |
| component. |
| |
| Timers |
| ------ |
| |
| The timers from ezcDebug can be used for two purposes: |
| |
| - Timers measure the time between two points in the program. |
| - Accumulators get the current time after a certain point (for example after |
| starting the script). |
| |
| Both methods are executed with ezcDebug::startTimer(), ezcDebug::stopTimer() |
| and ezcDebug::switchTimer(). The next script demonstrates the usage of these |
| methods: |
| |
| .. include:: tutorial_timers.php |
| :literal: |
| |
| The output is as follows (if the CSS stylesheet is used that is available |
| through "Example Stylesheet" in the menu): |
| |
| .. image:: img/debug_tutorial_timers.png |
| |
| |
| The output has two groups: output and accumulators. There are two timers in the |
| "output" group: "Hello world" and "Goodbye cruel world". |
| |
| The "accumulators" group has one timer called "Program runtime". This |
| timer took a total of 0.00034 seconds. In this timer are several "switch |
| timers". These show the time since the "Program runtime" was started. |
| |
| |
| Recursive timers |
| ---------------- |
| |
| You can also time repeating code blocks. For example, you can measure the time a |
| PHP statement takes in a loop. The Debug timer will calculate the average time |
| of the repeating statement and display it in the debug summary. See the next |
| example: |
| |
| .. include:: tutorial_recursive_timers.php |
| :literal: |
| |
| The resulting output is as follows (if the CSS stylesheet is used that is available |
| through "Example Stylesheet" in the menu): |
| |
| .. image:: img/debug_tutorial_recursive_timers.png |
| |
| Stack traces |
| ------------ |
| |
| Sometimes it is useful to get a stack trace for log messages. To achieve this, |
| there are 2 possibilities offered by the Debug component: |
| |
| 1) Global stack trace switch |
| ```````````````````````````` |
| |
| .. include:: tutorial_global_stacktrace.php |
| :literal: |
| |
| In this example, the debug options (see: ezcDebugOptions) are used to switch on |
| stack traces globally. The effect is, that whenever a debug message is logged, a |
| stack trace is logged in addition. When printing the debug information, |
| stack traces in the manor of `Xdebug`_ are included in the output. |
| |
| .. _`Xdebug`: http://xdebug.org/docs/stack_trace |
| |
| Beside the $stackTrace option itself, the appearance of the stack traces is |
| configured. This configuration only takes effect, if `Xdebug`_ is not |
| installed. In this case, an own implementation is used to retrieve stack traces |
| that look almost exactly like the Xdebug version. If Xdebug is installed, its |
| internal settings will be used. |
| |
| The possible options for stack traces are: |
| |
| $stackTraceDepth |
| Defines the number of nested function calls included in the trace (starting |
| at the most recent one). This option also affects `Xdebug`_ generated stack |
| traces. The default is 5. |
| $stackTraceMaxData |
| Maximum bytes of data to be dumped for variable values. The default is 512. |
| $stackTraceMaxChildren |
| Defines the maximum number of child elements that will be dumped for array |
| and object structures. The default value is 128. |
| $stackTraceMaxDepth |
| Maximum level of iteration that is performed when dumping nested array or |
| object structures. |
| |
| 2) Local stack trace switch |
| ``````````````````````````` |
| |
| If stack traces are not desired with every log message, it is also possible to |
| activate them when the log message is issued: |
| |
| .. include:: tutorial_local_stacktrace.php |
| :literal: |
| |
| |
| .. |
| Local Variables: |
| mode: rst |
| fill-column: 79 |
| End: |
| vim: et syn=rst tw=79 |