yep/workflow-logger

v1.3.0 2017-10-02 20:50 UTC

This package is auto-updated.

Last update: 2024-09-11 19:32:51 UTC


README

Build Status Scrutinizer Code Quality Scrutinizer Code Coverage Latest Stable Version Total Downloads License

工作流日志记录器

Packagist

在 Packagist.org 上有关于 yep/workflow-logger 的反射,只需将依赖项添加到您的 composer.json 文件中。

{
  "require" : {
    "yep/workflow-logger": "^1.2"
  }
}

或者运行 Composer 命令

php composer.phar require yep/workflow-logger

耶普/WorkflowLogger 做什么?

它帮助记录工作流!😳

试着想象这种情况↓↓↓

<?php
class SomeImportantManagerClass {
    public function doSomeImportantJob($importantParameter) {
        $foo = $this->doSomethingImportant($importantParameter);

        if($foo > 1) {
            $this->doSomeMagicButReallyImportantMagic();
        }
    }
    ...
}

$someImportantManagerClass = new SomeImportantManagerClass();
$someImportantVariable = 1;

$someImportantManagerClass->doSomeImportantJob($someImportantVariable);

问题:你如何知道每个方法是否确实做了你期望的事情?
答案:我不知道,但我可以添加 Logger!😊
反应:👍

所以我们将添加 Monolog\Logger ↓↓↓

<?php
class SomeImportantManagerClass {
    /** @var Monolog\Logger  */
    private $logger;
    
    public function __construct(Monolog\Logger $logger) {
        $this->logger = $logger;
    }
    
    public function doSomeImportantJob($importantParameter) {
        $this->logger->info('Im in!');

        $foo = $this->doSomethingImportant($importantParameter);
        $this->logger->info('I just done something important!', ['foo' => $foo]);

        if($foo > 1) {
            $result = $this->doSomeMagicButReallyImportantMagic();
            $this->logger->alert('Abracadabra #copperfield', ['result' => $result, 'foo' => $foo]);
        }
        else {
            $this->logger->error('No Abracadabra #sadCopperfield', ['importantParameter' => $importantParameter, 'foo' => $foo]);
        }
    }
    ...
}

$importantLogger = new Monolog\Logger('ImportantLogger');

$someImportantManagerClass = new SomeImportantManagerClass($importantLogger);
$someImportantVariable = 1;

$someImportantManagerClass->doSomeImportantJob($someImportantVariable);

问题:我们会有多少条日志条目?
答案:3!😋
反应:是的,正确!👍

问题:但如果我们只想记录一条日志记录应该怎么办?😏
答案:不知道... 😱
反应:真的吗?那么,看看下面!😎

我们将“改进”我们的日志记录↓↓↓

<?php
class SomeImportantManagerClass {
    /** @var Monolog\Logger  */
    private $logger;
    
    public function __construct(Monolog\Logger $logger) {
        $this->logger = $logger;
    }
    
    public function doSomeImportantJob($importantParameter) {
        $logMessage = "Im in!\n";
        $logContext = ['importantParameter' => $importantParameter];

        $foo = $this->doSomethingImportant($importantParameter);
        $logMessage .= "I just done something important!\n";
        $logContext['foo'] = $foo;

        if($foo > 1) {
            $result = $this->doSomeMagicButReallyImportantMagic();
            $logMessage .= "Abracadabra #copperfield\n";
            $logContext['result'] = $result;
        }
        else {
            $logMessage .= "No Abracadabra #sadCopperfield\n";
        }

        $this->logger->info($logMessage, $logContext);
    }
    ...
}

问题:好多了!你怎么想?
答案:但是但是但是妈妈,在这种情况下,我只能使用一种类型来记录这些消息,而且我不知道上下文数据是针对哪个的...
反应:是的,你是对的... 😅
然而,你可以使用我们的 WorkflowLogger!:bowtie:

现在耶普\WorkflowLogger\Logger 的真正魔法!😎 ↓↓↓

<?php
class SomeImportantManagerClass
{
    /** @var Yep\WorkflowLogger\Logger */
    private $logger;

    public function __construct(Yep\WorkflowLogger\Logger $logger)
    {
        $this->logger = $logger;
    }

    public function doSomeImportantJob($importantParameter)
    {
        $workflow = $this->logger->workflow();
        $workflow->info('Im in!');

        $foo = $this->doSomethingImportant($importantParameter);
        $workflow->info('I just done something important!', ['foo' => $foo]);

        if($foo > 1) {
            $result = $this->doSomeMagicButReallyImportantMagic();
            $workflow->alert('Abracadabra #copperfield', ['result' => $result, 'foo' => $foo]);
        }
        else {
            $workflow->error('No Abracadabra #sadCopperfield', ['importantParameter' => $importantParameter, 'foo' => $foo]);
        }

        $workflow->finish('Finished one of many important workflows', ['nextStep' => 'improve!']);
    }

}

// $dumper = new Yep\WorkflowLogger\ContextDumper\PrintRDumper();
// $dumper = new Yep\WorkflowLogger\ContextDumper\TracyDumper();
$dumper = new Yep\WorkflowLogger\ContextDumper\SymfonyVarDumper();
$formatter = new Yep\WorkflowLogger\Formatter\StandardFormatter($dumper, 2);
$importantLogger = new Yep\WorkflowLogger\Logger('ImportantLogger', $formatter);

$someImportantManagerClass = new SomeImportantManagerClass($importantLogger);
$someImportantVariable = 1;

$someImportantManagerClass->doSomeImportantJob($someImportantVariable);
日志结果
[2017-10-02 01:52:20] ImportantLogger.WORKFLOW: Finished one of many important workflows

Workflow:
  [2017-10-02 22:43:46.624555] INFO: Im in!
  [2017-10-02 22:43:46.624578] INFO: I just done something important! :sunglasses:
    Context:
      [
        "foo" => 2
      ]

  [2017-10-02 22:43:46.624591] ALERT: Abracadabra #copperfield
    Context:
      [
        "result" => "Alohomora"
        "foo" => 2
      ]

 {"nextStep":"improve!"} []

反应:😳 😱

提示

  • 你可以多次使用相同的流程,直到它在完成时锁定或通过手动锁定方法锁定。
    如果你想获取相同的流程,只需调用 $logger->workflow($key) 并将 key 作为第一个参数。
    每次你调用该方法时,logger 都会给你相同的流程,直到锁定。😎
  • 如果你想使用 \Monolog\Formatter\ChromePHPFormatter\Monolog\Formatter\GelfMessageFormatter\Monolog\Formatter\WildfireFormatter 或类似的具有冻结日志级别的格式化程序,你必须使用 \Yep\WorkflowLogger\MonologFormatterAdapter
  • 你知道你可以缩进工作流消息吗?是的,你可以。只需使用 Yep\WorkflowLogger\Formatter\StandardFormatter($dumper, $indent) 的第二个参数。😉

就是这样。希望你喜欢它。😙