Reference

Formatters

A formatter is an object that is responsible for taking an event array describing a log event and outputting a string with a formatted log line.

Some writers are not line-oriented, such as the Db, FirePhp, and ChromePhp writers. For these writers, formatters ensure the individual values in the event array are formatted properly for the writer.

Simple Formatting

Laminas\Log\Formatter\Simple is the default formatter. It is configured automatically when you specify no formatter. The default configuration is equivalent to the following:

$format = '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL;
$formatter = new Laminas\Log\Formatter\Simple($format);

A formatter is set on an individual writer object using the writer's setFormatter() method:

$writer = new Laminas\Log\Writer\Stream('php://output');
$formatter = new Laminas\Log\Formatter\Simple('hello %message%' . PHP_EOL);
$writer->setFormatter($formatter);

$logger = new Laminas\Log\Logger();
$logger->addWriter($writer);

$logger->info('there');

// outputs "hello there"

The constructor of Laminas\Log\Formatter\Simple accepts two parameters: the format string and the format for DateTime objects in event data. The format string contains keys surrounded by percent signs (e.g. %message%) and may contain any key from the event data array. You can retrieve the default keys by using the DEFAULT_FORMAT constant from Laminas\Log\Formatter\Simple.

The DateTime format string follows PHP's DateTimeInterface::format pattern and defaults to the format described in ISO 8601. You can retrieve the default DateTime format by using the DEFAULT_DATETIME_FORMAT constant from Laminas\Log\Formatter\FormatterInterface.

Formatting to JSON

Laminas\Log\Formatter\Json is the JSON formatter. By default, it automatically logs all items as JSON:

$writer = new Laminas\Log\Writer\Stream('php://output');
$formatter = new Laminas\Log\Formatter\Json();
$writer->setFormatter($formatter);

$logger = new Laminas\Log\Logger();
$logger->addWriter($writer);

$logger->info('there');

// outputs "{"timestamp":"2016-09-07T13:58:01+00:00","priority":6,"priorityName":"INFO","message":"there","extra":[]}"

Formatting to XML

Laminas\Log\Formatter\Xml formats log data into XML strings. By default, it automatically logs all items in the event array:

$writer = new Laminas\Log\Writer\Stream('php://output');
$formatter = new Laminas\Log\Formatter\Xml();
$writer->setFormatter($formatter);

$logger = new Laminas\Log\Logger();
$logger->addWriter($writer);

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

The code above outputs the following XML (space added for clarity):

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

It's possible to customize the root element, as well as specify a mapping of XML elements to the items in the event data array. The constructor of Laminas\Log\Formatter\Xml accepts a string with the name of the root element as the first parameter, and an associative array with the element mapping as the second parameter:

$writer = new Laminas\Log\Writer\Stream('php://output');
$formatter = new Laminas\Log\Formatter\Xml('log', [
    'msg' => 'message',
    'level' => 'priorityName',
]);
$writer->setFormatter($formatter);

$logger = new Laminas\Log\Logger();
$logger->addWriter($writer);

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

The code above changes the root element from its default of logEntry to log. It also maps the element msg to the event data item message. This results in the following output:

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

Formatting to FirePhp

Laminas\Log\Formatter\FirePhp formats log data for the Firebug extension for Firefox.