How to Configure Monolog to Display Console Messages

It is possible to use the console to print messages for certain verbosity levels using the OutputInterface instance that is passed when a command is run.

コマンドの実行時に渡される OutputInterface インスタンスを使用して、コンソールを使用して、特定の詳細レベルのメッセージを出力できます。

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. For example:

多くのロギングが発生する必要がある場合、詳細設定 (-v、-vv、-vvv) に応じて情報を出力するのは面倒です。これは、呼び出しを条件でラップする必要があるためです。例えば:
1
2
3
4
5
6
7
8
9
10
11
12
13
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

protected function execute(InputInterface $input, OutputInterface $output)
{
    if ($output->isDebug()) {
        $output->writeln('Some info');
    }

    if ($output->isVerbose()) {
        $output->writeln('Some more info');
    }
}

Instead of using these semantic methods to test for each of the verbosity levels, the MonologBridge provides a ConsoleHandler that listens to console events and writes log messages to the console output depending on the current log level and the console verbosity.

これらのセマンティック メソッドを使用して各詳細レベルをテストする代わりに、MonologBridge はコンソール イベントをリッスンし、現在のログ レベルとコンソール詳細度に応じてログ メッセージをコンソール出力に書き込む ConsoleHandler を提供します。

The example above could then be rewritten as:

上記の例は、次のように書き直すことができます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// src/Command/YourCommand.php
namespace App\Command;

use Psr\Log\LoggerInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class YourCommand extends Command
{
    private $logger;

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

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->logger->debug('Some info');
        $this->logger->notice('Some more info');
    }
}

Depending on the verbosity level that the command is run in and the user's configuration (see below), these messages may or may not be displayed to the console. If they are displayed, they are time-stamped and colored appropriately. Additionally, error logs are written to the error output (php://stderr). There is no need to conditionally handle the verbosity settings anymore.

コマンドが実行される詳細レベルとユーザーの構成 (以下を参照) に応じて、これらのメッセージがコンソールに表示される場合と表示されない場合があります。それらが表示される場合、タイムスタンプが付けられ、適切に色付けされます。さらに、エラー ログがエラー出力 (php://stderr) に書き込まれます。詳細設定を条件付きで処理する必要はもうありません。
LoggerInterface Verbosity Command line
->error() OutputInterface::VERBOSITY_QUIET stderr
->warning() OutputInterface::VERBOSITY_NORMAL stdout
->notice() OutputInterface::VERBOSITY_VERBOSE -v
->info() OutputInterface::VERBOSITY_VERY_VERBOSE -vv
->debug() OutputInterface::VERBOSITY_DEBUG -vvv

The Monolog console handler is enabled by default:

Monolog コンソール ハンドラーはデフォルトで有効になっています。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
# config/packages/dev/monolog.yaml
monolog:
    handlers:
        # ...
        console:
            type:   console
            process_psr_3_messages: false
            channels: ['!event', '!doctrine', '!console']

            # optionally configure the mapping between verbosity levels and log levels
            # verbosity_levels:
            #     VERBOSITY_NORMAL: NOTICE

Now, log messages will be shown on the console based on the log levels and verbosity. By default (normal verbosity level), warnings and higher will be shown. But in full verbosity mode, all messages will be shown.

これで、ログ レベルと詳細度に基づいてコンソールにログ メッセージが表示されます。デフォルト (通常の詳細度レベル) では、警告以上が表示されます。ただし、詳細モードでは、すべてのメッセージが表示されます。