sbwerewolf / subprocess-logger
子进程事件日志库
Requires
- psr/log: ^3.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
composer require sbwerewolf/subprocess-logger
微操作的包式日志器
当自己开发时,在试验一些想法时,只有在出现故障时才会查看日志。
在这种情况下,只有在出现错误时才想看到详细的日志,如果没有错误,则不想用消息来填充日志。但当你写入日志时,你还不知道会发生故障,所以必须记录所有内容。
但我们确实可以不必保存所有内容,也不必总是保存。我们可以在发生错误或故障时保存日志。
专为这种用途开发了 SbWereWolf\BatchLogger\Archivist
。
使用它非常简单。
记录工作开始 Archivist::start()
。
如果发生故障,则保存详细的消息日志,Archivist::writeDetails()
。
如果没有发生故障,则记录成功的简短日志,Archivist::writeBrief()
。
使用示例
use Integration\FileLogger; use SbWereWolf\BatchLogger\ArchivistFactory; $filePath = date('Ymd') . '.log'; $file = fopen($filePath, 'a'); $logger = new FileLogger($file); $toLevel = [ 'debug' => 7, 'info' => 6, 'notice' => 5, 'warning' => 4, 'error' => 3, 'critical' => 2, 'alert' => 1, 'emergency' => 0, ]; $archivist = (new ArchivistFactory()) ->setParent('Global process') ->setChild('Example of Archivist using') ->setConverting($toLevel) ->setLevel('debug') ->make($logger); try { $archivist->start('notice', 'start process'); /* Add to journal some algorithm notes */ $archivist->debug('some debug info'); /* If process finish with no errors - write brief to logs */ $archivist->writeBrief( 'notice', 'process finish with success' ); } catch (Throwable $e) { $message = "message: {$e->getMessage()}," . " trace:{$e->getTraceAsString()}"; $archivist->critical($message); /* If some exception will occur - write detail logs */ $archivist->writeDetails( 'notice', 'process finish with failure' ); } fclose($file);
如果代码没有故障运行,则日志将包含两条消息
- 开始进程
- 进程成功完成
如果代码运行时发生故障,则日志将包含所有消息
- 开始进程
- 一些调试信息
- 消息:
exception
,跟踪:exception code trace
- 进程失败完成
为了更直观地展示工作原理,已经编写了测试,只需启动即可看到在什么情况下有多少条记录进入日志。
日志级别和其他选项
日志级别由用户选择,每个级别名称(字符串值)都应该与其级别(整数值)相对应。
使用数组方法 ArchivistFactory::setConverting(array(string=>int))
设置日志级别。
使用方法 ArchivistFactory::setLevel(string)
可以限制将进入日志的消息级别。如果消息级别高于设置的级别,则该消息将被丢弃,不会写入日志。
使用方法 ArchivistFactory::setParent(string)
设置进程的父标识符。
使用方法 ArchivistFactory::setChild(string)
设置进程的子标识符。
可以使用父标识符来构建整个进程的执行树。
或者可以使用父标识符作为贯穿,而子标识符用于算法的各个步骤。
为了直接写入日志,需要将实现 LoggerInterface
接口的实例传递给方法 ArchivistFactory::make()
(创建 Archivist
实例)。
特性
由于日志保存到内存中,因此仅适用于短进程,对于这些进程,必须调用方法 Archivist::writeBrief()
或 Archivist::writeDetails()
。
如果这些方法没有调用,则所有可用的内存都将被日志占用。只有在调用这两个方法时才会清除消息列表。
联系方式
Вольхин Николай
e-mail ulfnew@gmail.com
phone +7-902-272-65-35
Telegram @sbwerewolf