Skip to content

Commit

Permalink
feature #3696 [Console] Added standalone PSR-3 compliant logger (dung…
Browse files Browse the repository at this point in the history
…las)

This PR was merged into the master branch.

Discussion
----------

[Console] Added standalone PSR-3 compliant logger

| Q             | A
| ------------- | ---
| Doc fix?      | no
| New docs?     | yes symfony/symfony#10194
| Applies to    | 2.5

Commits
-------

15628e6 [Console] Added standalone PSR-3 compliant logger
  • Loading branch information
weaverryan committed Mar 24, 2014
2 parents 955526c + 15628e6 commit 1908a15
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 0 deletions.
1 change: 1 addition & 0 deletions components/console/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ Console
changing_default_command
single_command_tool
events
logger
helpers/index
108 changes: 108 additions & 0 deletions components/console/logger.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
.. index::
single: Console; Logger

Using the Logger
================

.. versionadded:: 2.5
The :class:`Symfony\\Component\\Console\\Logger\\ConsoleLogger` was
introduced in Symfony 2.5.

The Console component comes with a standalone logger complying with the
`PSR-3_` standard.
Depending of the verbosity setting, log messages will be sent to the
:class:`Symfony\\Component\\Console\\Output\\OutputInterface` instance
passed as a parameter to the constructor.

The logger does not have any external dependency except ``php-fig/log``.
This is useful for console applications and commands needing a lightweight
PSR-3 compliant logger::

namespace Acme;

use Psr\Log\LoggerInterface;

class MyDependency
{
private $logger;

public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}

public function doStuff()
{
$this->logger->info('I love Tony Vairelles\' hairdresser.');
}
}

You can rely on the logger to use this dependency inside a command::

namespace Acme\Console\Command;

use Acme\MyDependency;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Logger\ConsoleLogger;

class MyCommand extends Command
{
protected function configure()
{
$this
->setName('my:command')
->setDescription(
'Use an external dependency requiring a PSR-3 logger'
)
;
}

protected function execute(InputInterface $input, OutputInterface $output)
{
$logger = new ConsoleLogger($output);

$myDependency = MyDependency($logger);
$myDependency->doStuff();
}
}

The dependency will use the instance of
``Symfony\\Component\\Console\\Logger\\ConsoleLogger`` as logger.
Log messages emitted will be displayed on the console output.

Verbosity
---------

Depending on the verbosity level that the command is run, messages may or
may not be sent to the ``Symfony\\Component\\Console\\Output\\OutputInterface`` instance.

By default, the console logger behaves like the
:doc:`Monolog's Console Handler </cookbook/logging/monolog_console>`.
The association between the log level and the verbosity can be configured
through the second parameter of the :class:`Symfony\\Component\\Console\\ConsoleLogger`
constructor::

// ...
$verbosityLevelMap = array(
LogLevel::NOTICE => OutputInterface::VERBOSITY_NORMAL,
LogLevel::INFO => OutputInterface::VERBOSITY_NORMAL,
);
$logger = new ConsoleLogger($output, $verbosityLevelMap);

Color
-----

The logger outputs the log messages formatted with a color reflecting their
level. This behavior is configurable through the third parameter of the
constructor::

// ...
private $formatLevelMap = array(
LogLevel::CRITICAL => self::INFO,
LogLevel::DEBUG => self::ERROR,
);
$logger = new ConsoleLogger($output, array(), $formatLevelMap);

.. _PSR-3: http://www.php-fig.org/psr/psr-3/
5 changes: 5 additions & 0 deletions cookbook/logging/monolog_console.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ It is possible to use the console to print messages for certain
:class:`Symfony\\Component\\Console\\Output\\OutputInterface` instance that
is passed when a command gets executed.

.. seealso::
Alternatively, you can use the
:doc:`standalone PSR-3 logger </components/console/logger>` provided with
the console component.

When a lot of logging has to happen, it's cumbersome to print information
depending on the verbosity settings (``-v``, ``-vv``, ``-vvv``) because the
calls need to be wrapped in conditions. The code quickly gets verbose or dirty.
Expand Down

0 comments on commit 1908a15

Please sign in to comment.