Using the Factory to Create a Log
In addition to direct instantiation, you may also use the static
factory() method to instantiate a Log instance, as well as to
configure attached writers and their filters. Using the factory, you can attach zero or
more writers. Configuration may be passed as either an array or a
Zend_Config instance. If you want to create an instance of
a custom class (extending Zend_Log), you can pass a className
option to the factory() method.
As an example:
'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,
),
),
));
]]>
The above will instantiate a logger with two writers, one for writing to a local file,
another for sending data to Firebug. Each has an attached priority filter, with different
maximum priorities.
By default, events are logged with the ISO 8601 date format. You can choose your own format
with the option timestampFormat.
Each writer can be defined with the following keys:
writerName (required)
The "short" name of a log writer; the name of the log writer minus the leading
class prefix/namespace. See the "writerNamespace" entry below for more details.
Examples: "Mock", "Stream", "Firebug".
writerParams (optional)
An associative array of parameters to use when instantiating the log writer.
Each log writer's factory() method will map these to
constructor arguments, as noted below.
writerNamespace (optional)
The class prefix/namespace to use when constructing the final log writer
classname. By default, if this is not provided, "Zend_Log_Writer" is assumed;
however, you can pass your own namespace if you are using a custom log writer.
formatterName (optional)
The "short" name of a formatter to use with the given log writer; the name of the
formatter minus the leading class prefix/namespace. See the "formatterNamespace"
entry below for more details. Examples: "Simple", "Xml".
formatterParams (optional)
An associative array of parameters to use when instantiating the log formatter.
Each log formatter's factory() method will map these to
constructor arguments, as noted below.
formatterNamespace (optional)
The class prefix/namespace to use when constructing the final log formatter
classname. By default, if this is not provided, "Zend_Log_Formatter" is assumed;
however, you can pass your own namespace if you are using a custom log formatter.
filterName (optional)
The "short" name of a filter to use with the given log writer; the name of the
filter minus the leading class prefix/namespace. See the "filterNamespace" entry
below for more details. Examples: "Message", "Priority".
filterParams (optional)
An associative array of parameters to use when instantiating the log filter.
Each log filter's factory() method will map these to
constructor arguments, as noted below.
filterNamespace (optional)
The class prefix/namespace to use when constructing the final log filter
classname. By default, if this is not provided, "Zend_Log_Filter" is assumed;
however, you can pass your own namespace if you are using a custom log filter.
Each writer and each filter has specific options.
Writer Options
Zend_Log_Writer_Db Options
db
A Zend_Db_Adapter instance.
table
The name of the table in the RDBMS that will contain log entries.
columnMap
An associative array mapping database table column names to log event
fields.
Zend_Log_Writer_Firebug Options
This log writer takes no options; any provided will be ignored.
Zend_Log_Writer_Mail Options
Zend_Log_Writer_Mail Options
Option
Data Type
Default Value
Description
mail
String
Zend_Mail
An Zend_Mail instance
charset
String
iso-8859-1
Charset of the mail
from
String or Array
NULL
Sender of the mail
The parameters for Array type are :
email : address of sender
name : name of sender
to
String or Array
NULL
Recipient(s) of the mail
cc
String or Array
NULL
Carbon copy recipient(s) of the mail
bcc
String or Array
NULL
Blind carbon copy recipient(s) of the mail
subject
String
NULL
Subject of the mail
subjectPrependText
String
NULL
A summary of number of errors per priority is appended to the
subject of the mail
layout
String
NULL
An Zend_Layout instance
layoutOptions
Array
NULL
See the section
layoutFormatter
String
NULL
An Zend_Log_Formatter_Interface instance
Zend_Log_Writer_Mock Options
This log writer takes no options; any provided will be ignored.
Zend_Log_Writer_Null Options
This log writer takes no options; any provided will be ignored.
Zend_Log_Writer_Stream Options
stream|url
A valid PHP stream identifier to which to log.
mode
The I/O mode with which to log; defaults to "a", for "append".
Zend_Log_Writer_Syslog Options
application
Application name used by the syslog writer.
facility
Facility used by the syslog writer.
Zend_Log_Writer_ZendMonitor Options
This log writer takes no options; any provided will be ignored.
Filter Options
Zend_Log_Filter_Message Options
regexp
Regular expression that must be matched in order to log a message.
Zend_Log_Filter_Priority Options
priority
The maximum priority level by which messages will be logged.
operator
The comparison operator by which to do priority comparisons; defaults to
"<=".
Zend_Log_Filter_Suppress Options
This log filter takes no options; any provided will be ignored.
Creating Configurable Writers and Filters
If you find yourself needing to write your own log writers and/or filters, you can make
them compatible with Zend_Log::factory() very easily.
At the minimum, you need to implement
Zend_Log_FactoryInterface, which expects a static
factory() method that accepts a single argument,
$config, which may be either an array or
Zend_Config object. If your log writer extends
Zend_Log_Writer_Abstract, or your log filter extends
Zend_Log_Filter_Abstract, you will pick this up for free.
Then, simply define mappings between the accepted configuration and any constructor
arguments. As an example:
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']
);
}
}
]]>
Alternately, you could call appropriate setters after instantiation, but prior to
returning the instance:
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;
}
}
]]>