基于 Symfony Console 组件改进的 Psr-3 / Psr\Log logger。


README

基于 Symfony Console 组件改进的 PSR-3 Psr\Log logger。

ci scrutinizer codecov license

组件状态

Robo 中使用。

动机

Consolidation\Log 提供了一个与 PSR-3 兼容的 logger,它可以将格式化的日志输出到标准错误流(stderr)。默认情况下,样式由 Symfony Console 组件的 SymfonyStyle 类提供;然而,如果需要,也可以提供替代的样式器。

使用方法

$logger = new \Consolidation\Log\Logger($output);
$logger->setLogOutputStyler(new LogOutputStyler()); // optional
$logger->warning('The file {name} does not exist.', ['name' => $filename]);

字符串插值(即替换,如上述示例中的 {name})不是 PSR-3 所必需的,也不是 Psr\Log 项目中默认实现的。然而,它被 PRS-3 推荐并经常使用,例如在 Symfony Console logger 中。

Consolidation\Log 支持字符串插值。

可以使用日志管理器将所有日志消息委托给一个或多个 logger。

$logger = new \Consolidation\Log\LoggerManager();
$logger->add('default', new \Consolidation\Log\Logger($output));

例如,如果您需要在早期将 logger 注入到应用程序对象中(例如,注入到依赖注入容器中),但输出对象将在稍后才能使用,这非常有用。

与现有解决方案的比较

许多 Symfony Console 组件使用 SymfonyStyle 来格式化它们的输出消息。这个辅助类有诸如 successwarning 这样的方法名,使其似乎是一个自然的选择用于报告状态。

然而,在实践中,使用实际的 Psr-3 logger 进行日志记录要方便得多。这样做允许 Symfony Console 组件调用可能不需要依赖 Symfony Style 的外部库。让 Psr\Log\LoggerInterface 作为控制台工具及其依赖库之间唯一的共享 IO 相关接口,促进了松耦合,允许这些库在可能希望以不同方式记录的其他上下文中重用。

Symfony Console 提供了 ConsoleLogger 来满足这一需求;然而,ConsoleLogger 并不提供任何用于格式化输出的功能,使得 SymfonyStyle 成为有样式意识的控制台程序员首选的日志记录机制。

Consolidation\Log 提供了这两个类的好处,允许代码在技术上表现正确(重定向到 stderr)的同时,不牺牲样式。

Monolog 也提供了一种功能齐全的控制台 logger,可能适用于某些用例。