shalvah/clara

🔊 CLI应用程序的简单、美观、可测试的控制台输出。

3.2.0 2024-02-27 20:30 UTC

This package is auto-updated.

Last update: 2024-08-27 21:33:57 UTC


README

image Total Downloads Build Status

CLI应用程序的简单、美观、可测试的控制台输出。(在Scribe中使用。)

特性

  • 颜色和emoji来区分日志类型
  • 两种不同的输出模式,根据您需要的颜色程度选择
  • 自动隐藏/显示调试输出
  • 可以捕获控制台输出以方便测试——无需模拟
  • 可定制颜色方案

Icons mode

图标模式

Labels mode

标签模式

安装

(PHP 7.4+)

composer require shalvah/clara

使用Clara

$output = clara('myappname');

$output->info("Installing package");
$output->debug("Attempt 3 of 5");
$output->warn("The file does not exist.");
$output->error("Something went wrong!");
$output->success("Done. Go and be awesome.");

选择模式

默认情况下,Clara使用"图标"模式——输出根据输出类型着色,并添加emoji(如上第一张截图所示)。如果您愿意,可以切换到"标签"模式

$output = clara('myappname', \Shalvah\Clara\Clara::MODE_LABELS);
// The default
$output = clara('myappname', \Shalvah\Clara\Clara::MODE_ICONS);

在标签模式中(上第二张截图所示),emoji仍然存在,但输出类型被写出,主要输出消息不着色。

禁用颜色和emoji

如果您希望输出一行文本而没有上面函数提供的额外格式,可以使用->line()方法。

自定义颜色方案

您还可以通过传递包含您首选颜色的数组作为第三个参数来自定义Clara为每种类型使用的颜色

$output = clara('myappname', \Shalvah\Clara\Clara::MODE_ICONS, [
    'info' => 'blue',
]);

有关支持的颜色详细信息,请参阅Symfony文档

切换调试输出

在CLI应用程序中包含一个详细标志(--verbose),允许您向用户显示更多(调试)输出是一种常见做法。使用Clara,您可以轻松启用或禁用调试日志

$isVerbose = $this->getFlag('verbose');

// If $isVerbose is true,
// Clara won't print or capture any debug logs
$app1 = clara('app1')->showDebugOutput($isVerbose); 
$app1->debug("App 1 - Output 1");

// You can also toggle debug output manually
$app1->hideDebugOutput();
$app1->debug("App 1 - Output 2");

$app1->showDebugOutput();
$app1->debug("App 1 - Output 3");

请注意,默认情况下,Clara将显示所有输出。

静音输出

有时在运行应用程序的测试时,您不希望控制台被输出消息弄乱。您可以使用mute()unmute静态方法关闭Clara的输出。要静音或取消静音特定应用程序,请传入应用程序名称。

$output1 = clara('myapp1');
$output2 = clara('myapp2');

// Mute only output from "myapp1"
Clara::mute('myapp1');
// Won't be printed.
$output1->info("Installing package");

// Will be printed
$output2->info("Installing package");

Clara::mute(); // Mute all apps
Clara::unmute("myapp1"); // Unmute myapp1
Clara::unmute(); // Unmute all apps

仅显示应用程序的输出。

假设您的应用程序包含另一个使用Clara的应用程序。默认情况下,所有应用程序的输出都会显示。您可以通过调用->only()关闭除了您的应用程序之外的所有应用程序的输出。

// SHow only output from mymainapp
$output1 = clara('mymainapp')->only();

// This is equivalent to doing:
Clara::mute();
Clara::unmute('yourappname');

捕获输出

有时您需要断言应用程序打印了您期望的内容。一种简单的方法是使用输出捕获。

Clara::startCapturingOutput('myapp1'); // Clara will start capturing output from myapp1
$output1 = clara('myapp1');
$output1->warn("Going to fail");
$output1->error("Failed");

$capturedOutput = Clara::getCapturedOutput('myapp1');
// $capturedOutput = [
//   "⚠ <fg=yellow>Going to fail</>",
//   "✖ <fg=red>Failed</>",
// ]

Clara::stopCapturingOutput('myapp1');
Clara::clearCapturedOutput('myapp1'); // Will empty saved output

您可以通过调用Clara::reset()将Clara的整个状态重置为默认值。这将清除捕获的输出,停止捕获所有应用程序,并取消静音所有应用程序。

设置输出通道

默认情况下,Clara输出到控制台,但实际上您可以将输出到其他地方。如果您正在编写Laravel Artisan命令并希望使用Clara进行输出同时通过Artisan的->output()方法捕获输出,这很有用。您只需调用useOutput并传入一个Symfony\Component\Console\Output\OutputInterface实例(对于Artisan类,它是$this->output)即可。

$this->clara = clara('myapp'
  ->showDebugOutput($this->option('verbose'))
  ->useOutput($this->output)
  ->only();