arcostasi/console-log

Laravel 的控制台日志门面

v1.1.5 2019-07-28 18:25 UTC

This package is not auto-updated.

Last update: 2024-09-30 21:33:02 UTC


README

JavaScript 控制台是我们开发和调试应用的一个非常有价值的工具。有了 console 对象及其日志方法,调用 alert() 来调试和获取变量值的日子已经一去不复返了。此外,多亏了正在进行中的标准,现代浏览器终于支持同一套方法。

需求

  • PHP 7.0 或更高版本
  • Laravel 5.0 或更高版本

安装

composer require arcostasi/console-log

现在您可以发布您的配置

php artisan vendor:publish --provider="Arcostasi\ConsoleLog\ConsoleLogServiceProvider"

添加到 config/app.php

'aliases' => [
  ...
  'Console' => Arcostasi\ConsoleLog\Facades\Console::class,

使用

将以下内容添加到您的 blade 视图模板中

<!-- Console log scripts -->
@if(Session::has('console.log'))
<script>
    @foreach(Session::get('console.log') as $console)
    {!! $console !!}
    @endforeach
</script>
{{ Session::forget('console.log') }}
@endif

并在您的 PHP 文件(控制器或模型)中添加 Console 门面

use Console;

日志记录

Console::Log 是我们常用的将值输出到控制台的方法

Console::Log("Hello\nConsole!!!");      // Displays as text with break line
Console::Log(2 + (2 * 3));              // Calculates the number and prints the result as text
Console::Log(new \DateTime());          // Displays as an Object
Console::Log(\App\Models\User::all());  // Displays as an Array

但我们还可以访问更多的日志方法,如 warn、info 和 error

Console::Warn('This is an example of WARNING!!');
Console::Info('This is an example of INFO!');
Console::Error('This is an example of ERROR!!! Boom 💣');

从生成的控制台输出中可以看出,使用 warn 或 error 方法也给出了堆栈跟踪

您还可以使用 Debug 方法打印出对象

use App\Models\User;
use Console;
  ...

Console::Debug(User::all());

或者您也可以使用 Trace 方法触发堆栈跟踪

use App\Models\User;
use Console;
  ...

Console::Trace(User::all());

控制台输出结果

表格

如果您愿意,甚至可以使用 Table 方法以表格格式更整洁地显示数据

use App\Models\User;
use Console;
  ...

Console::Table(User::all(['name', 'email']));

从生成的控制台输出中可以看出,使用 Table 方法

Dir & DirXML

Console Dir 和 DirXML 以美观的格式打印出对象

<?php
use Console;
  ...

$text = 'hello';

// This is a example with heredoc
$html = <<<HTML
<!DOCTYPE html>
<html lang="en">

<head>
  <!-- ... -->
</head>

<body>
  <h1>$text</h1>

  <script>
    console.dirxml(document.body);
  </script>
</body>

</html>
HTML;

Console::DirXML($html);

从生成的控制台输出中可以看出,使用 dirxml 方法

清除

您可以使用 Clear 方法清除控制台

Console::Clear();

断言

Assert 方法是运行简单断言测试的简单方法

Console::Assert(2 == '2', '2 not == to "2"'); // this will pass, nothing will be logged
Console::Assert(3 === '3', '3 not === to "3"'); // this fails, '3 not === to "3"' will be logged

计数

Count 方法用于计算使用相同提供的标签调用的次数

for ($i = 1; $i <= 5; $i++) {
    if ($i % 2 === 0) {
        Console::Count('even');
    } else {
        Console::Count('odd');
    }
}

控制台输出结果

计时

如本简短文章所示,您可以使用 Time 方法开始计时,然后使用 EndTime 方法结束计时。可选地,时间可以有一个标签

use Console;

Console::Time('fetching data');

$client = new \GuzzleHttp\Client();
$response = $client->get('https://api.github.com/user', ['auth' =>  ['user', 'pwd']]);
Console::Log("Status: {$response->getStatusCode()}"); // Status 200
Console::Log("Content-type: {$response->getHeaderLine('content-type')}"); // Content-type
Console::Log($response->getBody()->getContents());    // Object result

Console::TimeEnd('fetching data');

控制台输出结果

Status: 200
▼ Object
  name: "Anderson Costa"
  url: "https://api.github.com/users/arcostasi"
  blog: "https://arcostasi.github.com"
  avatar_url: "https://avatars0.githubusercontent.com/u/5041497?v=4"
  bio: "Software Developer"
  company: "AR2 Tecnologia"
  email: "arcostasi@gmail.com"
  created_at: "2013-07-18T18:04:44Z"
  ...
fetching data: 0.264892578125ms

分组

使用 Group 和 GroupEnd 方法将控制台消息分组在一起,并可选地添加标签。注意,一个组也可以嵌套在另一个组中

Console::Group('🖍️ colors');
Console::Log('red');
Console::Log('orange');
Console::Group('HEX');
Console::Log('#FF4C89');
Console::Log('#7186FE');
Console::GroupEnd();
Console::Log('blue');
Console::GroupEnd();

控制台输出结果

致谢

许可证

本库签署了 MIT 许可证,可按其条款复制。