монолог множественный форматировщик php

Я использую monolog и пытаюсь использовать 2 средства форматирования.
1. для файла с использованием обычного форматирования 2. с использованием обработчика gelf с форматированием logstash

код:

$logger = new Monolog\Logger("my-app");
$strHandle = new Monolog\Handler\RotatingFileHandler($settings['path'],$settings['max_files'], $settings['level']);
$formatter = new LogstashFormatter("name");
$strHandle->setFormatter($formatter);
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$handler = new \Monolog\Handler\GelfHandler(new \Gelf\Publisher(new \Gelf\Transport\TcpTransport("localhost", "1221")));
$logger->pushHandler($handler);
$logger->pushHandler($strHandle);
$logger->info("test");

это работает, но формат logstash также находится в файле, который я хочу что-то вроде:

$gelfHandler->setFormatter($formatter);

Я пробовал это, но получил ошибку 500

   $logger = new Monolog\Logger("my-app");
    $strHandle = new Monolog\Handler\RotatingFileHandler($settings['path'],$settings['max_files'], $settings['level']);
    $logger->pushProcessor(new Monolog\Processor\UidProcessor());
    $handler = new \Monolog\Handler\GelfHandler(new \Gelf\Publisher(new \Gelf\Transport\TcpTransport("localhost", "1221")));
    $formatter = new LogstashFormatter("name");
$handler->setFormatter($formatter);
    $logger->pushHandler($handler);
    $logger->pushHandler($strHandle);
    $logger->info("test");

person Tuz    schedule 10.07.2018    source источник


Ответы (1)


Я думаю, что вы можете использовать только GelfMessageFormatter с GelfHandler. https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md#formatters

У вас есть точная ошибка? Пробовали без LogstashFormatterfor Gelf?

person Vaidas Lungis    schedule 10.07.2018
comment
спасибо, но мне нужен формат logstash, и я хочу написать обычный формат для файлов - person Tuz; 11.07.2018
comment
получил захватываемую фатальную ошибку: аргумент 1, переданный в Gelf\Publisher::publish(), должен быть экземпляром Gelf\MessageInterface, задана строка, вызов - person Tuz; 11.07.2018
comment
Да, и GelfMessageFormatter создает объект Message интерфейса MessageInterface github.com/Seldaek/monolog/blob/master/src/Monolog/Formatter/ Итак, вам нужно использовать GelfMessageFormatter. Может быть, Logstash поймет этот формат и сконвертирует его внутри? Нет опыта работы с логсташем :) Но гугл находит плагин elastic.co/guide/en/logstash/current/plugins-inputs-gelf.html - person Vaidas Lungis; 11.07.2018