5 use Robo\Contract\PrintedInterface;
6 use Robo\Contract\ProgressIndicatorAwareInterface;
7 use Robo\Contract\VerbosityThresholdInterface;
8 use Robo\Common\ProgressIndicatorAwareTrait;
11 use Psr\Log\LoggerAwareInterface;
12 use Psr\Log\LoggerAwareTrait;
13 use Consolidation\Log\ConsoleLogLevel;
16 * Log the creation of Result objects.
18 class ResultPrinter implements LoggerAwareInterface, ProgressIndicatorAwareInterface
21 use ProgressIndicatorAwareTrait;
24 * Log the result of a Robo task.
26 * Returns 'true' if the message is printed, or false if it isn't.
28 * @param \Robo\Result $result
32 public function printResult(Result $result)
34 $task = $result->getTask();
35 if ($task instanceof VerbosityThresholdInterface && !$task->verbosityMeetsThreshold()) {
38 if (!$result->wasSuccessful()) {
39 return $this->printError($result);
41 return $this->printSuccess($result);
46 * Log that we are about to abort due to an error being encountered
47 * in 'stop on fail' mode.
49 * @param \Robo\Result $result
51 public function printStopOnFail($result)
53 $this->printMessage(LogLevel::NOTICE, 'Stopping on fail. Exiting....');
54 $this->printMessage(LogLevel::ERROR, 'Exit Code: {code}', ['code' => $result->getExitCode()]);
58 * Log the result of a Robo task that returned an error.
60 * @param \Robo\Result $result
64 protected function printError(Result $result)
66 $task = $result->getTask();
67 $context = $result->getContext() + ['timer-label' => 'Time', '_style' => []];
68 $context['_style']['message'] = '';
71 if ($task instanceof PrintedInterface) {
72 $printOutput = !$task->getPrinted();
75 $this->printMessage(LogLevel::ERROR, "{message}", $context);
77 $this->printMessage(LogLevel::ERROR, 'Exit code {code}', $context);
82 * Log the result of a Robo task that was successful.
84 * @param \Robo\Result $result
88 protected function printSuccess(Result $result)
90 $task = $result->getTask();
91 $context = $result->getContext() + ['timer-label' => 'in'];
92 $time = $result->getExecutionTime();
94 $this->printMessage(ConsoleLogLevel::SUCCESS, 'Done', $context);
100 * @param string $level
101 * @param string $message
102 * @param array $context
104 protected function printMessage($level, $message, $context = [])
106 $inProgress = $this->hideProgressIndicator();
107 $this->logger->log($level, $message, $context);
109 $this->restoreProgressIndicator($inProgress);