web-dev-qa-db-fra.com

PHP: Comment utiliser monolog pour se connecter à la console (php: // out)?

Je viens de passer à monolog et je voulais enregistrer mon message dans la console PHP au lieu d'un fichier. Cela peut sembler évident pour certaines personnes, mais il m'a fallu un peu de temps pour comprendre comment faire cela et je n'ai pas pu trouver une question/réponse similaire sur SO.

L'exemple sur Readme Github de Monolog montre seulement comment utiliser un fichier:

<?php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); // <<< uses a file

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');

Mais il n'indique nulle part comment les messages peuvent être enregistrés sur la console. Après avoir recherché sur Google, j'ai atterri soit sur une page d'aide pour Symfony, soit sur des questions de personnes cherchant un moyen de se connecter à la console du navigateur.

31
Hirnhamster

La solution est assez simple. Comme l'exemple montre un StreamHandler, il est possible de passer dans un flux (au lieu du chemin vers un fichier). Par défaut, tout ce qui est répété dans PHP est écrit dans php: // stdout/php: // output afin que nous puissions simplement utiliser l'un de ceux-ci comme flux pour le StreamHandler:

<?php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('php://stdout', Logger::WARNING)); // <<< uses a stream

// add records to the log
$log->warning('Foo');
$log->error('Bar');

J'espère que cela fait gagner du temps à quelqu'un :)

60
Hirnhamster

Quelques détails supplémentaires si vous souhaitez modifier la mise en forme du message par défaut en même temps:

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

$output = "[%datetime%] %channel%.%level_name%: %message%\n";
$formatter = new LineFormatter($output);

$streamHandler = new StreamHandler('php://stdout', Logger::DEBUG);
$streamHandler->setFormatter($formatter);

$logger = new Logger('LoggerName');
$logger->pushHandler($streamHandler);
13
Justin Tilson