Настройка json форматера в монологе

Как журналы могут быть установлены в формате JSON в монологе....

$logger = new StreamHandler(__DIR__.'/my_app.log');
$logger->setFormatter( new JsonFormatter() );
$logger->pushHandler($logger);

Это не кажется правильным, так как показывает ошибку

Вызов неопределенного метода Monolog\Logger::setFormatter()

Также я хотел бы, чтобы мой журнал был записан так:

message{
a="something";
b="something else"
}

вместо:

message{a="something";b="something else"}

1 ответ

В случае, если у кого-то еще есть этот вопрос: средство форматирования может быть установлено для обработчика, а не для регистратора.

      use Monolog\Formatter\JsonFormatter;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;

$logger = new Logger('your_channel_name');
$handler = new StreamHandler('your/dir.log');
$handler->setFormatter( new JsonFormatter() );
$logger->pushHandler($handler);

// and then where ever in the code
$logger->info('your message', ["var1" => "value 1", "otherVar" => "otherValue"]);

// it will result in a parsable output similar to this:
// {
//   "message":"your message",
//   "context": {
//      "var1":"value 1", 
//      "otherVar":"otherValue"
//   }, 
//   "level":200, 
//   "level_name":"INFO",  
//   "channel":"your_channel_name",
//   "datetime":"2021-06-25T10:54:10.116817+00:00",
//   "extra":{}
// }

Сама документация не самая лучшая, но тоже начало.

Другие вопросы по тегам