承接 sbwerewolf/subprocess-logger 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

sbwerewolf/subprocess-logger

Composer 安装命令:

composer require sbwerewolf/subprocess-logger

包简介

Library for logging of subprocess events

README 文档

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);

Если код отработает без сбоев, то в логах будет два сообщения:

  • start process
  • process finish with success

Если при работе кода произойдёт сбой, то в логи будут записаны все сообщения:

  • start process
  • some debug info
  • message: exception, trace: exception code trace
  • process finish with failure

Для более наглядной демонстрации работы написаны тесты, просто запустите, и сразу увидите в каких случаях, сколько записей попадает в логи.

Уровни логирования и другие опции

Уровни логирования задаются по выбору пользователя, каждому названию уровня (строковое значение) должен быть сопоставлен его уровень (целочисленное значение).

Уровни логирования устанавливаются с помощью массива методом ArchivistFactory::setConverting(array(string=>int)).

С помощью метода ArchivistFactory::setLevel(string) можно ограничить уровень сообщений которые попадут в логи. Если уровень сообщения выше заданного, то такое сообщение будет отброшено и не будет записано в логи.

Родительский идентификатор процесса устанавливается методом ArchivistFactory::setParent(string)

Дочерний идентификатор процесса устанавливается методом ArchivistFactory::setChild(string)

Родительский и дочерний идентификаторы можно использовать, что бы строить дерево выполнения процесса в целом.

Либо можно использовать родительский идентификатор как сквозной, а дочерние идентификаторы для отдельных шагов алгоритма.

Для непосредственной записи в логи, необходимо передать экземпляр поддерживающий интерфейс LoggerInterface в метод ArchivistFactory::make() (создания экземпляра Archivist).

Особенности

Поскольку логи сохраняются в оперативную память, использовать Archivist следует только для коротких процессов, для которых обязательно будут вызваны методы Archivist::writeBrief() или Archivist::writeDetails().

Если эти методы не будут вызваны, то вся доступная оперативная память будет забита логами. Очистка списка сообщений происходит только при вызове этих двух методов.

Контакты

Вольхин Николай
e-mail ulfnew@gmail.com
phone +7-902-272-65-35
Telegram @sbwerewolf

Telegram chat with me

sbwerewolf/subprocess-logger 适用场景与选型建议

sbwerewolf/subprocess-logger 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 12 月 15 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 sbwerewolf/subprocess-logger 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 sbwerewolf/subprocess-logger 我们能提供哪些服务?
定制开发 / 二次开发

基于 sbwerewolf/subprocess-logger 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2021-12-15