How to Define a Custom Logging Formatter
Each logging handler uses a Formatter
to format the record before logging
it. All Monolog handlers use an instance of
Monolog\Formatter\LineFormatter
by default but you can replace it.
Your formatter must implement Monolog\Formatter\FormatterInterface
.
For example, to use the built-in JsonFormatter
, register it as a service then
configure your handler to use it:
1 2 3 4 5 6 7
# config/packages/prod/monolog.yaml (and/or config/packages/dev/monolog.yaml)
monolog:
handlers:
file:
type: stream
level: debug
formatter: 'monolog.formatter.json'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<!-- config/packages/prod/monolog.xml (and/or config/packages/dev/monolog.xml) -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:monolog="http://symfony.com/schema/dic/monolog"
xsi:schemaLocation="http://symfony.com/schema/dic/services
https://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/monolog
https://symfony.com/schema/dic/monolog/monolog-1.0.xsd">
<monolog:config>
<monolog:handler
name="file"
type="stream"
level="debug"
formatter="monolog.formatter.json"
/>
</monolog:config>
</container>
1 2 3 4 5 6 7 8 9 10
// config/packages/prod/monolog.php (and/or config/packages/dev/monolog.php)
use Symfony\Config\MonologConfig;
return static function (MonologConfig $monolog) {
$monolog->handler('file')
->type('stream')
->level('debug')
->formatter('monolog.formatter.json')
;
};
Many built-in formatters are available in Monolog. A lot of them are declared as services
and can be used in the formatter
option:
monolog.formatter.chrome_php
: formats a record according to the ChromePHP array formatmonolog.formatter.gelf_message
: serializes a format to GELF formatmonolog.formatter.html
: formats a record into an HTML tablemonolog.formatter.json
: serializes a record into a JSON objectmonolog.formatter.line
: formats a record into a one-line stringmonolog.formatter.loggly
: formats a record information into JSON in a format compatible with Logglymonolog.formatter.logstash
: serializes a record to Logstash Event Formatmonolog.formatter.normalizer
: normalizes a record to remove objects/resources so it's easier to dump to various targetsmonolog.formatter.scalar
: formats a record into an associative array of scalar (+ null) values (objects and arrays will be JSON encoded)monolog.formatter.wildfire
: serializes a record according to Wildfire's header requirements
This work, including the code samples, is licensed under a
Creative Commons BY-SA 3.0
license.