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.
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.
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>