Search code examples
phploggingmonolog

monolog multiple formatter php


I am using monolog and trying ti use 2 formatter.
1. for a file using regular formatter 2. using gelf handler with logstash formatter

code:

$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");

that is working but the format of logstash is also in the file I want something like :

$gelfHandler->setFormatter($formatter);

I tried this but got 500 error

   $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");

Solution

  • I think you can use only GelfMessageFormatter with GelfHandler. https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md#formatters

    Do you have an exact error? Did you try without LogstashFormatterfor Gelf?