TigerZF
🌐Español

44.3. Formateadores

Un Formatter es un objeto responsable de tomar un array de event que describe un evento de log y devolver una cadena con una línea de log formateada.

Algunos Writers no están orientados a líneas y no pueden usar un Formatter. Un ejemplo es el Database Writer, que inserta los elementos del evento directamente en columnas de la base de datos. Para los Writers que no pueden soportar un Formatter, se lanza una excepción si se intenta establecer un Formatter.

44.3.1. Formateo simple

Zend_Log_Formatter_Simple es el formateador predeterminado. Se configura automáticamente cuando no especifica ningún formateador. La configuración predeterminada es equivalente a lo siguiente:

$format = '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL;
$formatter = new Zend_Log_Formatter_Simple($format);

Un formateador se establece en un objeto Writer individual usando el método setFormatter() del Writer:

$writer = new Zend_Log_Writer_Stream('php://output');
$formatter = new Zend_Log_Formatter_Simple('hello %message%' . PHP_EOL);
$writer->setFormatter($formatter);

$logger = new Zend_Log();
$logger->addWriter($writer);

$logger->info('there');

// outputs "hello there"

El constructor de Zend_Log_Formatter_Simple acepta un único parámetro: la cadena de formato. Esta cadena contiene claves rodeadas por signos de porcentaje (por ejemplo, %message%). La cadena de formato puede contener cualquier clave del array de datos del evento. Puede obtener las claves predeterminadas usando la constante DEFAULT_FORMAT de Zend_Log_Formatter_Simple.

44.3.2. Formateo a XML

Zend_Log_Formatter_Xml formatea los datos de log en cadenas XML. Por defecto, registra automáticamente todos los elementos del array de datos del evento:

$writer = new Zend_Log_Writer_Stream('php://output');
$formatter = new Zend_Log_Formatter_Xml();
$writer->setFormatter($formatter);

$logger = new Zend_Log();
$logger->addWriter($writer);

$logger->info('informational message');

El código anterior produce la siguiente salida XML (espacio añadido para mayor claridad):

<logEntry>
  <timestamp>2007-04-06T07:24:37-07:00</timestamp>
  <message>informational message</message>
  <priority>6</priority>
  <priorityName>INFO</priorityName>
</logEntry>

Es posible personalizar el elemento raíz, así como especificar una asignación de elementos XML a los elementos del array de datos del evento. El constructor de Zend_Log_Formatter_Xml acepta una cadena con el nombre de el elemento raíz como primer parámetro y un array asociativo con la asignación de elementos como segundo parámetro:

$writer = new Zend_Log_Writer_Stream('php://output');
$formatter = new Zend_Log_Formatter_Xml('log',
                                        array('msg' => 'message',
                                              'level' => 'priorityName')
                                       );
$writer->setFormatter($formatter);

$logger = new Zend_Log();
$logger->addWriter($writer);

$logger->info('informational message');

El código anterior cambia el elemento raíz de su valor predeterminado logEntry a log. También asigna el elemento msg al elemento de datos del evento message. Esto produce la siguiente salida:

<log>
  <msg>informational message</msg>
  <level>INFO</level>
</log>