Дата обновления перевода 2021-09-28

Как сконфигурировать Monolog для исключения конкретных HTTP-кодов из лога

Иногда ваши логи становятся переполненными нежелательными HTTP-ошибками, к примеру, 403 и 404. При использовании обработчика fingers_crossed, вы можете исключить ведение логов этих HTTP-кодов, основываясь на конфигурации MonologBundle:

  • YAML
    1
    2
    3
    4
    5
    6
    7
    8
    # config/packages/prod/monolog.yaml
    monolog:
        handlers:
            main:
                # ...
                type: fingers_crossed
                handler: ...
                excluded_http_codes: [403, 404, { 400: ['^/foo', '^/bar'] }]
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <!-- config/packages/prod/monolog.xml -->
    <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 type="fingers_crossed" name="main" handler="...">
                <!-- ... -->
                <monolog:excluded-http-code code="403">
                    <monolog:url>^/foo</monolog:url>
                    <monolog:url>^/bar</monolog:url>
                </monolog:excluded-http-code>
                <monolog:excluded-http-code code="404"/>
            </monolog:handler>
        </monolog:config>
    </container>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    // config/packages/prod/monolog.php
    use Symfony\Config\MonologConfig;
    
    return static function (MonologConfig $monolog) {
        $mainHandler = $monolog->handler('main')
            // ...
            ->type('fingers_crossed')
            ->handler(...)
        ;
    
        $mainHandler->excludedHttpCode()->code(403);
        $mainHandler->excludedHttpCode()->code(404);
    };
    

Caution

Комбинируя excluded_http_codes с passthru_level ниже, чем than error (т.е. debug, info, notice или warning) не исключит сообщения логов для этих HTTP-кодов на самом деле, потому что их логи ведутся на уровне error и выше, а passthru_level главенствует над HTTP-кодами, перечисленными в excluded_http_codes.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.