salibhdr / php-dump-logger
PHP 堆栈日志记录器使用 Symfony 的 var-dumper 创建简单、易用、赏心悦目且格式优美的日志文件,适用于任何 PHP 应用程序。它可以独立使用,也可以与 Laravel、Symfony、yii2 以及其他 PHP 框架一起使用。
Requires
- php: ^7.2 | ^7.3 | ^7.4 | ^8.0 | ^8.1 | ^8.2
- symfony/var-dumper: ^5 | ^6 | ^7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2 | ^3
- mockery/mockery: ^1
- phpunit/phpunit: ^6 | ^7 | ^8 | ^9
README
关于可读性
目录
介绍
PHP 堆栈日志记录器使用 Symfony 的 var-dumper 创建简单、易用、赏心悦目且格式优美的日志文件,适用于任何 PHP 应用程序。如果您是使用 dd() 和 dump() 的忠实粉丝,这个包就是为您准备的。
示例日志文件内容
您是否尝试使用 monolog、Symfony 或 Laravel 日志记录器来记录某些内容,然后在文本迷宫中寻找记录的数据?尤其是在您没有时间,不想安装和配置 Xdebug,或者在生产代码中存在错误,您只想查看 API 响应而不想干扰代码执行时。
dd()、dump() 或 var_dump() 函数的问题在于它们会打印数据,这有时您可能不希望看到,尤其是在代码执行不应中断的情况下。
第一个解决方案是使用日志记录器来记录数据,而不是使用这些打印函数。但正如我所说,日志记录器不会生成可读性强的文件,有时您只能向它们提供字符串,而且它们无法直接记录复杂的类。如果能有一个像 dd() 一样不会中断代码的功能该多好。
这里就出现了 php-dump-logger。
php-dump-logger 使用 Symfony 的 var-dumper 生成日志内容,然后将输出保存到文件中。顺便说一句,这确实很悦目。您可以选择以 html 或 log 格式记录数据,甚至提供自己的 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: 无法更改dumperSaliBhdr\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许可证发布。
用❤为你们建造。
测试
用于测试
composer test
用于使用php代码嗅探器
composer csfix
用于csfix和测试
composer testfix
贡献
请参阅CONTRIBUTING以获取详细信息。