salibhdr/php-dump-logger

PHP 堆栈日志记录器使用 Symfony 的 var-dumper 创建简单、易用、赏心悦目且格式优美的日志文件,适用于任何 PHP 应用程序。它可以独立使用,也可以与 Laravel、Symfony、yii2 以及其他 PHP 框架一起使用。

2.1.1 2024-05-06 17:27 UTC

This package is auto-updated.

Last update: 2024-09-06 18:22:28 UTC


README

关于可读性

Total Downloads Today Downloads Required PHP Version Testing codecov Latest Versions Unstable Version

目录

介绍

PHP 堆栈日志记录器使用 Symfony 的 var-dumper 创建简单、易用、赏心悦目且格式优美的日志文件,适用于任何 PHP 应用程序。如果您是使用 dd()dump() 的忠实粉丝,这个包就是为您准备的。

示例日志文件内容

php dump logger

您是否尝试使用 monolog、Symfony 或 Laravel 日志记录器来记录某些内容,然后在文本迷宫中寻找记录的数据?尤其是在您没有时间,不想安装和配置 Xdebug,或者在生产代码中存在错误,您只想查看 API 响应而不想干扰代码执行时。

dd()dump()var_dump() 函数的问题在于它们会打印数据,这有时您可能不希望看到,尤其是在代码执行不应中断的情况下。

第一个解决方案是使用日志记录器来记录数据,而不是使用这些打印函数。但正如我所说,日志记录器不会生成可读性强的文件,有时您只能向它们提供字符串,而且它们无法直接记录复杂的类。如果能有一个像 dd() 一样不会中断代码的功能该多好。

这里就出现了 php-dump-logger

php-dump-logger 使用 Symfony 的 var-dumper 生成日志内容,然后将输出保存到文件中。顺便说一句,这确实很悦目。您可以选择以 htmllog 格式记录数据,甚至提供自己的 dumper。

功能

  • 可读的 html 格式日志
  • 可读的 log 格式日志
  • 可以记录类、数组、对象以及您喜欢的任何变量。没有限制。
  • 完全自定义日志格式和 dumper
  • 分离每日日志和综合日志
  • 以自定义级别记录日志文件
  • 更改日志路径和目录

安装

通过 composer 安装

 composer require salibhdr/php-dump-logger

版本兼容性

基本用法

<?php

use SaliBhdr\DumpLog\Factory\Logger;

Logger::make()
        ->path('__path-to-dir__')
        ->log([
          "foo" => [
            "foo" => "bar"
            "tar" => "go"
            "zee" => "lorem"
          ]
          "tar" => [
            "foo" => "bar"
          ]
          "zee" => "lorem"
        ])

这将创建一个类似于 __path-to-dir__/dump/log.log 的文件

---| 2023-01-18 13:37:09 |-------------------------------------------------------------------------------------------

array:3 [
  "foo" => array:3 [
    "foo" => "bar"
    "tar" => "go"
    "zee" => "lorem"
  ]
  "tar" => array:1 [
    "foo" => "bar"
  ]
  "zee" => "lorem"
]

详细用法

方法

每个日志级别(info、error、warning 等)都会创建一个带有方法名称的单独日志文件。

use SaliBhdr\DumpLog\Factory\Logger;

$logger = Logger::make()
        ->path('__path-to-dir__');
        
$logger->emergency(mixed $data);
$logger->alert(mixed $data);
$logger->critical(mixed $data);
$logger->error(mixed $data);
$logger->warning(mixed $data);
$logger->notice(mixed $data);
$logger->info(mixed $data);
$logger->debug(mixed $data);
$logger->exception(\Throwable $e);
$logger->log(mixed $data);

异常日志记录

如果您想以更易于阅读的方式记录异常,应使用 exception() 方法。此方法非常适合创建异常的日志。如果您想查看异常的跟踪信息,可以将名为 $withTrace 的第二个参数设置为 true

try {

    throw new \Exception('exception message', 500);
    
} catch (\Throwable $e) {

    $logger->exception($e, true);
}

输出 exception.log


---| 2023-01-18 14:01:54 |-------------------------------------------------------------------------------------------

array:5 [
  "class" => "Exception"
  "massage" => "exception message"
  "code" => 500
  "file" => "__path_to_file__"
  "line" => 356
  "trace" => array:12 [...] // appears only if $withTrace is true
]


自定义日志级别

如前所述,每个日志级别都会创建一个单独的日志文件。因此,您可以通过更改log()方法中$level参数的值来创建具有自定义文件名的自定义日志级别。

   $logger->log($data, 'custom-level');

这将创建一个名为custom-level.log的文件。


路径

默认情况下,日志目录的路径设置为$_SERVER['DOCUMENT_ROOT'],但如果您从控制台命令调用此日志记录器,则文档根将为空,日志记录器将无法找到保存文件的目录,并会抛出InvalidArgumentException。因此,请确保提供目录路径,如下所示

$logger->path('__path-to-dir__');

目录名称

默认情况下,日志文件的父目录名为dump,但您可以使用dir()方法更改日志文件的目录名称。

$logger->dir('__dir-name__');

您还可以使用此dir()方法来组织您的日志文件。例如,如果您想将自定义日志添加到单独的目录中,可以这样做

$logger->dir('dump/custom')
       ->log($data, 'custom-level');

目录权限

有时您想将日志文件放在权限受限的目录中。为了做到这一点,您可以使用permission()方法更改日志文件的目录权限。请注意,此目录权限仅在目录首次创建时应用。因此,您不能在创建后更改目录的权限。请记住提供具有正确权限以创建和执行目录中文件的组。您不希望创建一个连PHP都无法写入的目录。默认情况下,目录及其内部文件将具有0775权限。

$logger->permission(0777);

每日日志

有时您想根据日期将数据每日记录到单独的文件中。您可以通过调用daily()方法使用日期后缀将日志文件每日分开。

$logger->daily()
       ->info();

它将为单独的日期创建这样的文件


info-2023-01-18.log
info-2023-01-19.log
info-2023-02-01.log


静默记录

调用silent()方法允许您在不抛出错误的情况下记录数据。

请注意,在某些情况下,当$path为空或由于权限原因无法写入目标文件时,记录器将抛出错误。

因此,如果您想避免这种情况,并且不想中断代码执行,您可以调用silent()方法。在后台,此方法将强制记录器在try-catch块中执行代码,并返回布尔值而不是异常。

$logger->silent(); //result will be true for success and false for failed attempt to log

记录器

美观记录器

美观记录器用于以美观易读的方式创建具有.log扩展名的日志文件。

您可以使用记录器工厂类创建美观记录器

<?php

use SaliBhdr\DumpLog\Factory\Logger;

$logger = Logger::make(); // the pretty logger is the default logger

// or

$logger = Logger::make('pretty');

// or

$logger = Logger::pretty();

HTML记录器

HTML记录器用于以美观易读的方式创建具有.html扩展名的日志文件。您可以通过不同的变量进行导航,切换多维数组,并查看复杂类的属性。

您可以使用记录器工厂创建HTML记录器

<?php

use SaliBhdr\DumpLog\Factory\Logger;

$logger = Logger::make('html');

// or

$logger = Logger::html();

原始记录器

原始记录器是其他记录器使用的基类。原始记录器和其他记录器之间的唯一区别是,此记录器中未指定dumper或路径,您必须使用dumper()方法提供dumper,并使用path()方法提供路径。否则,它将抛出SaliBhdr\DumpLog\Exceptions\InvalidArgumentException

请注意,dumper应该是Symfony\Component\VarDumper\Dumper\AbstractDumper的实例。您可以自由创建自己的dumper并使用原始记录器。

示例

use SaliBhdr\DumpLog\Loggers\RawLogger;
use Symfony\Component\VarDumper\Dumper\CliDumper;

$dumper     = new CliDumper();
$logger     = new RawLogger();
$extension  = 'txt';

$logger->path('__path_to_dir__')
       ->dumper($dumper, $extension)
       ->log($data)

自定义记录器

您可以通过实现以下接口之一来创建自己的记录器

  • SaliBhdr\DumpLog\Contracts\DumpLoggerInterface : 无法更改dumper
  • SaliBhdr\DumpLog\Contracts\DumpLoggerAwareInterface : 您必须添加dumper()设置器

您还可以通过在Logger中首先实例化RawLogger,然后使用SaliBhdr\DumpLog\Traits\LogsThroughRawLogger trait来在自己的Logger中使用RawLogger。

如果您使用DumpLoggerAwareInterface,请注意,dumper应该实现SaliBhdr\DumpLog\Contracts\DumperStrategyInterface接口;

示例dumper策略

<?php

namespace App;

use SaliBhdr\DumpLog\Contracts\DumperStrategyInterface;
use Symfony\Component\VarDumper\Dumper\AbstractDumper;
use Symfony\Component\VarDumper\Dumper\CliDumper;

class CustomDumperStrategy implements DumperStrategyInterface
{

    public function getDumper() : AbstractDumper
    {
       # Here we want to render the log content with CliDumper
       return new CliDumper();
    }
    
    public function getExtension() : string
    {
       # Here we want to save it as text file
       return 'txt';
    }
    
    public function getTitle(): string
    {
        # title will be shown on top of each log (usually it's better to add the date and time)
        return "\n" . date('H:i:s') . "\n"
    }
    
}

然后您可以使用自己的dumper策略

<?php

use App\CustomDumperStrategy;
use SaliBhdr\DumpLog\Contracts\DumpLoggerInterface;

class CustomTextLogger implements DumpLoggerInterface 
{
    use LogsThroughRawLogger;

    protected $logger;

    public function __construct()
    {        
        $this->logger = (new RawLogger())
            ->dumper(new CustomDumperStrategy())
            ->path('__path-to-dir__');
    }
}

完整示例

<?php

use SaliBhdr\DumpLog\Factory\Logger;

Logger::make()
        ->path('__path-to-dir__')
        ->dir('__custom-dir-name__')
        ->daily(true)
        ->silent(true)
        ->permission(0777)
        ->info($data);

问题

您可以在GitHub仓库此处报告问题

许可证

PHP dump logger遵循MIT许可证发布。

Salar Bahador创建

salar bahador linkedin LinkedIn     salar bahador github GitHub     salar bahador packegist Packagist

用❤为你们建造。

测试

用于测试

composer test

用于使用php代码嗅探器

composer csfix

用于csfix和测试

composer testfix

贡献

请参阅CONTRIBUTING以获取详细信息。