Symfony 4 включает ведение журнала с помощью обработчика Monis Redis - PullRequest
1 голос
/ 11 апреля 2019

У меня есть рабочий стек ELK, подключенный к Redis.

У меня также есть работающее приложение Symfony 4 без сохранения состояния, и я хочу отправить все производственные журналы на мой Redis.

Я знаю, что в Monolog есть обработчик Redis, но я не знаю, как мне настроить файл config / prod / monolog.yaml, чтобы выполнить это, если есть другой подход.

Вот как это выглядит сейчас:

monolog:
handlers:
    main:
        type: fingers_crossed
        action_level: error
        handler: nested
        excluded_http_codes: [404]
    nested:
        type: stream
        path: "php://stderr"
        level: debug
    console:
        type: console
        process_psr_3_messages: false
        channels: ["!event", "!doctrine"]
    deprecation:
        type: stream
        path: "php://stderr"
    deprecation_filter:
        type: filter
        handler: deprecation
        max_level: info
        channels: ["php"]

1 Ответ

0 голосов
/ 01 мая 2019

Подход, который я выбрал, заключался в первой установке клиента predis:

composer require predis/predis

Затем создайте пользовательский класс обслуживания, который расширяет класс RedisHandler, который входит в пакет Monolog:

namespace App\Service\Monolog\Handler;

use Monolog\Handler\RedisHandler;
use Monolog\Logger;
use Predis\Client as PredisClient;

class Redis extends RedisHandler
{
    public function __construct( $host, $port = 6379, $level = Logger::DEBUG, $bubble = true, $capSize = false)
    {
        $predis = new PredisClient( "tcp://$host:$port" );
        $key = 'logstash';

        parent::__construct($predis, $key, $level, $bubble, $capSize);
    }
}

Далее, активируйте только что созданный сервис в конфигурационном файле services.yml:

services:    
  monolog.handler.redis:
    class: App\Service\Monolog\Handler\Redis
    arguments: [ '%redis.host%' ]

Убедитесь, что параметр redis.host установлен и указывает на ваш сервер Redis. В моем случае моим параметром является IP-адрес моего сервера Redis.

Я добавил в класс другие параметры, такие как уровень порта и журнала. Вы можете установить его в момент создания вашего сервиса, как с параметром host.

Наконец, настройте свою собственную службу обработчика журналов в файле конфигурации monolog.yaml. В моем случае мне нужны только журналы производства с конфигурацией, как указано ниже:

handlers:
  custom:
    type: service
    id: monolog.handler.redis
    level: debug
    channels: ['!event']
...