使用日志记录器
Console 组件带有一个符合 PSR-3 标准的独立日志记录器。根据详细程度设置,日志消息将发送到作为参数传递给构造函数的 OutputInterface 实例。
除了 psr/log
之外,该记录器没有任何外部依赖项。这对于需要轻量级 PSR-3 兼容记录器的控制台应用程序和命令非常有用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
namespace Acme;
use Psr\Log\LoggerInterface;
class MyDependency
{
public function __construct(
private LoggerInterface $logger,
) {
}
public function doStuff(): void
{
$this->logger->info('I love Tony Vairelles\' hairdresser.');
}
}
您可以依赖该记录器在命令内部使用此依赖项
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
namespace Acme\Console\Command;
use Acme\MyDependency;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Logger\ConsoleLogger;
use Symfony\Component\Console\Output\OutputInterface;
#[AsCommand(
name: 'my:command',
description: 'Use an external dependency requiring a PSR-3 logger'
)]
class MyCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output): int
{
$logger = new ConsoleLogger($output);
$myDependency = new MyDependency($logger);
$myDependency->doStuff();
return Command::SUCCESS;
}
}
该依赖项将使用 ConsoleLogger 的实例作为记录器。发出的日志消息将显示在控制台输出中。
详细程度
根据命令运行的详细程度级别,消息可能会或可能不会发送到 OutputInterface 实例。
默认情况下,控制台记录器的行为类似于 Monolog 的控制台处理器。日志级别和详细程度之间的关联可以通过 ConsoleLogger 构造函数的第二个参数进行配置
1 2 3 4 5 6 7 8 9
use Psr\Log\LogLevel;
// ...
$verbosityLevelMap = [
LogLevel::NOTICE => OutputInterface::VERBOSITY_NORMAL,
LogLevel::INFO => OutputInterface::VERBOSITY_NORMAL,
];
$logger = new ConsoleLogger($output, $verbosityLevelMap);
颜色
记录器输出的日志消息使用反映其级别的颜色进行格式化。此行为可以通过构造函数的第三个参数进行配置
1 2 3 4 5 6 7
// ...
$formatLevelMap = [
LogLevel::CRITICAL => ConsoleLogger::ERROR,
LogLevel::DEBUG => ConsoleLogger::INFO,
];
$logger = new ConsoleLogger($output, [], $formatLevelMap);
错误
Console 记录器包含一个 hasErrored()
方法,只要在命令执行期间记录了任何错误消息,该方法就会返回 true
。这对于决定返回哪个状态代码作为执行命令的结果非常有用。
这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。