yep / workflow-logger
工作流日志记录器
v1.3.0
2017-10-02 20:50 UTC
Requires
- php: >=5.6
- monolog/monolog: ^1.5
- psr/log: ^1.0
Requires (Dev)
- phpunit/phpunit: ^5
- symfony/var-dumper: ^3.2
- tracy/tracy: ^2.3
- yep/reflection: ^1.0
Suggests
- symfony/var-dumper: To use SymfonyVarDumper install symfony/var-dumper=^3.2
- tracy/tracy: To use TracyDumper install tracy/tracy=^2.3
README
工作流日志记录器
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!
现在耶普\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)
的第二个参数。😉
就是这样。希望你喜欢它。😙