Sophie

Sophie

distrib > Mageia > 3 > i586 > by-pkgid > 7e5ea9a623e164fc1b2f74ffd149eedd > files > 12

ezcomponents-Debug-1.2.1-2.mga3.noarch.rpm

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