Además de la instanciación directa, también puede usar el método estático
factory() para instanciar un objeto Log, así como para
configurar los writers adjuntos y sus filtros. Usando la factory, puede adjuntar cero o
más writers. La configuración puede pasarse como un array o como una instancia de
Zend_Config. Si desea crear una instancia de
una clase personalizada (que extienda de Zend_Log), puede pasar una opción
className al método factory().
Como ejemplo:
$logger = Zend_Log::factory(array(
'timestampFormat' => 'Y-m-d',
array(
'writerName' => 'Stream',
'writerParams' => array(
'stream' => '/tmp/zend.log',
),
'formatterName' => 'Simple',
'formatterParams' => array(
'format' => '%timestamp%: %message% -- %info%',
),
'filterName' => 'Priority',
'filterParams' => array(
'priority' => Zend_Log::WARN,
),
),
array(
'writerName' => 'Firebug',
'filterName' => 'Priority',
'filterParams' => array(
'priority' => Zend_Log::INFO,
),
),
));
Lo anterior instanciará un logger con dos writers, uno para escribir en un archivo local, y otro para enviar datos a Firebug. Cada uno tiene un filtro de prioridad adjunto, con diferentes prioridades máximas.
Por defecto, los eventos se registran con el formato de fecha ISO 8601. Puede elegir su propio formato con la opción timestampFormat.
Cada writer puede definirse con las siguientes claves:
- writerName (requerido)
El nombre "corto" de un writer de log; el nombre del writer de log sin el prefijo/espacio de nombres de clase inicial. Consulte la entrada "writerNamespace" más abajo para más detalles. Ejemplos: "Mock", "Stream", "Firebug".
- writerParams (opcional)
Un array asociativo de parámetros a usar al instanciar el writer de log. El método
factory()de cada writer de log los mapeará a argumentos del constructor, según se indica más abajo.- writerNamespace (opcional)
El prefijo/espacio de nombres de clase a usar al construir el nombre de clase final del writer de log. Por defecto, si no se proporciona, se asume "Zend_Log_Writer"; sin embargo, puede pasar su propio espacio de nombres si está usando un writer de log personalizado.
- formatterName (opcional)
El nombre "corto" de un formatter a usar con el writer de log dado; el nombre del formatter sin el prefijo/espacio de nombres de clase inicial. Consulte la entrada "formatterNamespace" más abajo para más detalles. Ejemplos: "Simple", "Xml".
- formatterParams (opcional)
Un array asociativo de parámetros a usar al instanciar el formatter de log. El método
factory()de cada formatter de log los mapeará a argumentos del constructor, según se indica más abajo.- formatterNamespace (opcional)
El prefijo/espacio de nombres de clase a usar al construir el nombre de clase final del formatter de log. Por defecto, si no se proporciona, se asume "Zend_Log_Formatter"; sin embargo, puede pasar su propio espacio de nombres si está usando un formatter de log personalizado.
- filterName (opcional)
El nombre "corto" de un filtro a usar con el writer de log dado; el nombre del filtro sin el prefijo/espacio de nombres de clase inicial. Consulte la entrada "filterNamespace" más abajo para más detalles. Ejemplos: "Message", "Priority".
- filterParams (opcional)
Un array asociativo de parámetros a usar al instanciar el filtro de log. El método
factory()de cada filtro de log los mapeará a argumentos del constructor, según se indica más abajo.- filterNamespace (opcional)
El prefijo/espacio de nombres de clase a usar al construir el nombre de clase final del filtro de log. Por defecto, si no se proporciona, se asume "Zend_Log_Filter"; sin embargo, puede pasar su propio espacio de nombres si está usando un filtro de log personalizado.
Cada writer y cada filtro tiene opciones específicas.
- db
Una instancia de
Zend_Db_Adapter.- table
El nombre de la tabla en el RDBMS que contendrá las entradas del log.
- columnMap
Un array asociativo que mapea nombres de columna de la tabla de base de datos con campos del evento de log.
Este writer de log no toma opciones; cualquiera que se proporcione será ignorada.
Tabla 44.3. Opciones de Zend_Log_Writer_Mail
| Opción | Tipo de dato | Valor por defecto | Descripción |
|---|---|---|---|
| String | Zend_Mail |
Una instancia de Zend_Mail
|
|
| charset | String | iso-8859-1 | Charset del correo |
| from | String o Array | NULL |
Remitente del correo
Los parámetros para el tipo Array son:
|
| to | String o Array | NULL |
Destinatario(s) del correo |
| cc | String o Array | NULL |
Destinatario(s) en copia del correo |
| bcc | String o Array | NULL |
Destinatario(s) en copia oculta del correo |
| subject | String | NULL |
Asunto del correo |
| subjectPrependText | String | NULL |
Se añade al asunto del correo un resumen del número de errores por prioridad |
| layout | String | NULL |
Una instancia de Zend_Layout
|
| layoutOptions | Array | NULL |
Vea la sección Sección 40.3, “Opciones de configuración de Zend_Layout” |
| layoutFormatter | String | NULL |
Una instancia de Zend_Log_Formatter_Interface
|
Este writer de log no toma opciones; cualquiera que se proporcione será ignorada.
Este writer de log no toma opciones; cualquiera que se proporcione será ignorada.
- stream|url
Un identificador de stream válido de PHP en el que registrar el log.
- mode
El modo de E/S con el que registrar el log; por defecto es "a", de "append" (añadir).
- application
Nombre de la aplicación usado por el writer de syslog.
- facility
Facility usada por el writer de syslog.
- regexp
Expresión regular que debe coincidir para registrar un mensaje.
- priority
El nivel máximo de prioridad con el que se registrarán los mensajes.
- operator
El operador de comparación con el que se realizan las comparaciones de prioridad; por defecto es "<=".
Si en algún momento necesita escribir sus propios writers y/o filtros de log, puede
hacerlos compatibles con Zend_Log::factory() muy fácilmente.
Como mínimo, necesita implementar
Zend_Log_FactoryInterface, que espera un método estático
factory() que acepte un único argumento,
$config, que puede ser un array o un objeto
Zend_Config. Si su writer de log extiende de
Zend_Log_Writer_Abstract, o su filtro de log extiende de
Zend_Log_Filter_Abstract, obtendrá esto de forma gratuita.
Luego, simplemente defina los mapeos entre la configuración aceptada y los argumentos del constructor. Como ejemplo:
class My_Log_Writer_Foo extends Zend_Log_Writer_Abstract
{
public function __construct($bar, $baz)
{
// ...
}
public static function factory($config)
{
if ($config instanceof Zend_Config) {
$config = $config->toArray();
}
if (!is_array($config)) {
throw new Exception(
'factory expects an array or Zend_Config instance'
);
}
$default = array(
'bar' => null,
'baz' => null,
);
$config = array_merge($default, $config);
return new self(
$config['bar'],
$config['baz']
);
}
}
Alternativamente, podría llamar a los setters apropiados tras la instanciación, pero antes de devolver el objeto:
class My_Log_Writer_Foo extends Zend_Log_Writer_Abstract
{
public function __construct($bar = null, $baz = null)
{
// ...
}
public function setBar($value)
{
// ...
}
public function setBaz($value)
{
// ...
}
public static function factory($config)
{
if ($config instanceof Zend_Config) {
$config = $config->toArray();
}
if (!is_array($config)) {
throw new Exception(
'factory expects an array or Zend_Config instance'
);
}
$writer = new self();
if (isset($config['bar'])) {
$writer->setBar($config['bar']);
}
if (isset($config['baz'])) {
$writer->setBaz($config['baz']);
}
return $writer;
}
}