1 回答
TA贡献1818条经验 获得超8个赞
我认为没有现成的东西可以为您完成此任务。你可以用记录器实现类似的东西......但是你必须摆弄配置错误级别,可能注入多个记录器,控制台输出永远不会匹配一个SymfonyStyle,等等。
您最好自己构建,这应该不是特别困难。只需构建一些包装/装饰的东西SymfonyStyle;并捕获输出。
我将提供起始构建块,由您来完成实施:
class LoggingStyle
{
private SymfonyStyle $style;
private array $logEntries = [];
public function __construct(InputInterface $input, OutputInterface $output) {
$this->style = new SymfonyStyle($input, $output);
}
private function addLog(string $type, string $message): void
{
$this->logEntries[] = [
'type' => $type,
'message' => $message,
'time' => date('Y-m-d H:i:s')
];
}
public function flushLog():array
{
$log = $this->logEntries;
$this->logEntries = [];
return $log;
}
public function caution(string $message): void
{
$this->addLog('caution', $message);
$this->style->caution($message);
}
public function text(string $message): void
{
$this->addLog('text', $message);
$this->style->caution($message);
}
public function block(string $message): void
{
$this->addLog('block', $message);
$this->style->caution($message);
}
}
您需要实现SymfonyStyle您需要使用的界面的每个部分,并决定如何处理某些特殊行为(如果有的话)(例如,诸如 、 或进度条之类的东西ask())table()。但这完全取决于您的实施。
还要决定如何格式化电子邮件中的每种不同输出样式,因为逻辑上没有办法直接翻译它。
您可以直接使用此类,如果达到需要聚合输出的程度,您只需调用LoggingStyle::flushLog()并获取数组形式的所有条目,以便您进行相应处理和发送。
- 1 回答
- 0 关注
- 72 浏览
添加回答
举报