如何自定义一个日志formatter

3.4 版本
维护中的版本

每一种日志控制器(logging handler)都会在记录日志之前使用 Formatter 来格式化信息。所有Monolog handlers都默认使用 Monolog\Formatter\LineFormatter ,但你也可以轻松替换它。你的formatter必须要实现 Monolog\Formatter\FormatterInterface 接口。

1
2
3
4
5
6
7
8
9
10
# app/config/config.yml
services:
    my_formatter:
        class: Monolog\Formatter\JsonFormatter
monolog:
    handlers:
        file:
            type: stream
            level: debug
            formatter: my_formatter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- app/config/config.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
        http://symfony.com/schema/dic/services/services-1.0.xsd
        http://symfony.com/schema/dic/monolog
        http://symfony.com/schema/dic/monolog/monolog-1.0.xsd">
 
    <services>
        <service id="my_formatter" class="Monolog\Formatter\JsonFormatter" />
    </services>
 
    <monolog:config>
        <monolog:handler
            name="file"
            type="stream"
            level="debug"
            formatter="my_formatter"
        />
    </monolog:config>
</container>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// app/config/config.php
use Monolog\Formatter\JsonFormatter;
 
$container->register('my_formatter', JsonFormatter::class);
 
$container->loadFromExtension('monolog', array(
    'handlers' => array(
        'file' => array(
            'type'      => 'stream',
            'level'     => 'debug',
            'formatter' => 'my_formatter',
        ),
    ),
));

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)