冗长级别

3.4 版本
维护中的版本

控制台有五个Verbosity Levels(冗长级别),它们被定义在 OutputInterface:

Value / 值 Meaning / 含义 Console option
控制台选项
OutputInterface::VERBOSITY_QUIET 不要输出任何信息 -q or --quiet
OutputInterface::VERBOSITY_NORMAL 此为默认的冗长级别 (none)
OutputInterface::VERBOSITY_VERBOSE 冗长程度有所增加的信息 -v
OutputInterface::VERBOSITY_VERY_VERBOSE 加大非基本信息数量 -vv
OutputInterface::VERBOSITY_DEBUG 调试信息 -vvv

可以在命令行中仅以特定的冗长级别来输出信息。比如:

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
// ...
class CreateUserCommand extends Command
{
    // ...
 
    public function execute(InputInterface $input, OutputInterface $output)
    {
        $user = new User(...);
 
        $output->writeln(array(
            'Username: '.$input->getArgument('username'),
            'Password: '.$input->getArgument('password'),
        ));
 
        // the user class is only printed when the verbose verbosity level is used
        // user类仅当使用了vv级别时才会输出
        if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
            $output->writeln('User class: '.get_class($user));
        }
 
        // alternatively you can pass the verbosity level to writeln()
        // 你也可以把冗长级别传到writeln()中
        $output->writeln(
            'Will only be printed in verbose mode or higher', // 仅当v级或以上才会输出
            OutputInterface::VERBOSITY_VERBOSE
        );
    }
}

有若干语义化的方法可用于测试每一个冗长级别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ($output->isQuiet()) {
    // ...
}
 
if ($output->isVerbose()) {
    // ...
}
 
if ($output->isVeryVerbose()) {
    // ...
}
 
if ($output->isDebug()) {
    // ...
}

这些语义化方法(semantic methods)被定义在Symfony 3.0以来的 OutputInterface 接口。之前版本的Symfony中,它们被定义在不同的接口中 (如 Output),为的是确保向下兼容。

当使用了quiet level(静默级别)时,所有的output将被抑制,因为默认的 write() 方法不返回任何真实输出。

MonologBridge提供了一个 ConsoleHandler 类,允许你在控制台上显示信息。这比你有条件地对output调用进行打包要来得简洁。在Symfony框架中有一个例子,请参考 如何配置Monolog来显示控制台信息

如果使用了 VERBOSITY_VERBOSE 或以上级别,所有的异常追踪(exception stacktrace)都会被输出。

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

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