sbwerewolf/subprocess-logger

子进程事件日志库

1.0.2 2021-12-20 18:44 UTC

This package is auto-updated.

Last update: 2024-09-21 01:18:51 UTC


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

与我的Telegram聊天