使用Logger

3.4 版本
维护中的版本

Console组件自带了一个独立的logger,它遵循 PSR-3 标准。根据verbosity选项的设定,日志信息将被发送到 OutputInterface 实例,output实例作为logger的构造参数而传入。

这个logger并没有任何外部依赖,除了 php-fig/log 之外。因为这对命令行程序有用,命令行需要一个兼容PSR-3的轻量级logger:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.');
    }
}

在一个命令中使用(上面)这个依赖,即可依赖于此logger:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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 = new MyDependency($logger);
        $myDependency->doStuff();
    }
}

这个依赖(MyDependency类)所使用的logger,是 ConsoleLogger 实例。日志信息的发送,将会显示在控制台output中。

Verbosity(冗长) 

根据所运行命令的verbosity level,日志信息会(或不会)被发送至 OutputInterface 实例。

默认时,console logger的行为类似于 Monolog's Console Handler。log level(日志级别)以及冗长设置(verbosity)之间的关联,可以通过 ConsoleLogger 构造器的第二个参数来设置:

1
2
3
4
5
6
7
8
use Psr\Log\LogLevel;
// ...
 
$verbosityLevelMap = array(
    LogLevel::NOTICE => OutputInterface::VERBOSITY_NORMAL,
    LogLevel::INFO   => OutputInterface::VERBOSITY_NORMAL,
);
$logger = new ConsoleLogger($output, $verbosityLevelMap);

颜色 

logger输出的日志信息,会根据信息级别进行相应的颜色格式化。这种行为可以通过logger的第三个构造参数来配置:

1
2
3
4
5
6
// ...
$formatLevelMap = array(
    LogLevel::CRITICAL => ConsoleLogger::ERROR,
    LogLevel::DEBUG    => ConsoleLogger::INFO,
);
$logger = new ConsoleLogger($output, array(), $formatLevelMap);

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)