Как записывать сообщения в разные файлы

Как записывать сообщения в разные файлы

Фреймворк Symfony организовывает сообщения логов в каналы. По умолчанию, существует несколько каналов, включая doctrine, event, security, request и другие. Канал печатается в сообщении лога и может также быть использован для направления разных каналов в разные места/файлы.

По умолчанию, Symfony записывает каждое сообщение в один и тот же файл (не зависимо от канала).

Note

Каждый канал соответствует сервису логирования (monolog.logger.XXX) в контейнере (используйте команду debug:container, чтоб увидеть полный список), и они внедряются в разные сервисы.

Переключение канала на другой обработчик

Теперь, представьте, что вы хотите логировать канал security в другой файл. Чтобы сделать это, создайте новый обработчик и сконфигурируйте его так, чтобы он записывал только сообщения из канала security:

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# config/packages/monolog.yaml
monolog:
    handlers:
        security:
            # логировать все сообщения (так как отладка - нижайший уровень)
            level:    debug
            type:     stream
            path:     '%kernel.logs_dir%/security.log'
            channels: [security]

        # пример *отсутствия* логирования сообщений канала безопасности для этого обработчика
        main:
            # ...
            # channels: ['!security']

Caution

Конфигурация channels работает только для обработчиков высшего уровня. Обработчики, которые вложены в группу, буфер, фильтр, авось или что-либо подобное, будут игнорировать эту конфигурацию и обрабатывать каждое переданное им сообщение.

Спецификация YAML

Вы можете указать конфигурацию во многих формах:

1
2
3
4
5
6
7
channels: ~    # Включить все каналы

channels: foo  # Включить только канал 'foo'
channels: '!foo' # Включить все каналы, кроме 'foo'

channels: [foo, bar]   # Включить только каналы 'foo' и 'bar'
channels: ['!foo', '!bar'] # Включить все каналы, кроме 'foo' и 'bar'

Создание вашего собственного канала

Вы можете изменить канал записи логов Monolog по одному сервису за раз. Это делается либо через конфигурацию ниже, либо с помощью тегирования вашего сервиса monolog.logger и указания того, в каком канале сервис должен записывать логи. С тегом, обработчик логов, который внедряется в сервис, предварительно сконфигурирован так, чтобы использовать канал, который вы указали.

Конфигурация дополнительных канало без тегированных сервисов

Вы также можете сконфигурировать дополнительные каналы без необходимости тегировать ваши сервисы:

  • YAML
  • XML
  • PHP
1
2
3
# config/packages/monolog.yaml
monolog:
    channels: ['foo', 'bar']

Таким образом, вы теперь можете отправлять сообщения логов в канал foo, используя автоматически зарегистрированный сервис обработчика логов monolog.logger.foo.