Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: How to use monolog to log to console (php://out)?

I just switched to monolog and wanted to log my message to the PHP console instead of a file. This might seem obvious for some people, but it took me a little while to figure out how to do that and I couldn't find a similar question/answer on SO.

The example on Monolog's Github readme only shows how to use a file:

<?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');

But it doesn't state anywhere how messages can be logged to the console. After searching on Google, I landed either on a help page for Symfony or questions of people looking for a way to log to the browser console.

like image 765
Hirnhamster Avatar asked Sep 11 '14 12:09

Hirnhamster


People also ask

How to console log with PHP?

Using json_encode function$js_code = 'console. log(' . json_encode($output, JSON_HEX_TAG) . You can call this function at the exact place you want to run the console_log that we just created above.

What is PHP monolog?

Monolog is the existing standard logging library for PHP. It is most popular in PHP frameworks such as Laravel and Symfony, where it implements a common interface for logging libraries.

What are the different levels of logs we can have in monolog?

Monolog log levelsDEBUG - detailed debug information. INFO - interesting events. NOTICE - normal but significant events. WARNING - exceptional occurrences that are not errors.


2 Answers

The solution is rather simple. Since the example shows a StreamHandler it's possible to pass in a stream (instead of the path to a file). By default, everything that is echo'ed in PHP is written to php://stdout / php://output so we can simple use one of those as stream for the 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');

Hope this saves somebody some time :)

like image 86
Hirnhamster Avatar answered Oct 05 '22 02:10

Hirnhamster


Some extra details if you want to tweak the default message formatting at the same time:

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);
like image 26
Justin Tilson Avatar answered Oct 05 '22 02:10

Justin Tilson