2017 © Pedro Pelรกez
 

library workflow-logger

Workflow logger

image

yep/workflow-logger

Workflow logger

  • Monday, October 2, 2017
  • by yep
  • Repository
  • 1 Watchers
  • 0 Stars
  • 2,646 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 6 Versions
  • 17 % Grown

The README.md

Build Status Scrutinizer Code Quality Scrutinizer Code Coverage Latest Stable Version Total Downloads License, (*1)

Workflow logger

Packagist

Reflection is available on Packagist.org, just add the dependency to your composer.json., (*2)

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

or run Composer command:, (*3)

php composer.phar require yep/workflow-logger

What Yep/WorkflowLogger do?

It helps to log workflows! :flushed:, (*4)

Try to imagine this situation โ†“โ†“โ†“

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

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

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

$someImportantManagerClass->doSomeImportantJob($someImportantVariable);

Question: How do you know, that each method done exactly what you expect?
Answer: I don't know, but I can add Logger! :blush:
Reaction: :+1:, (*5)

So we will add 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);

Question: How many log items we will have?
Answer: 3! :yum:
Reaction: Yes, Correct! :+1:, (*6)

Question: But what should we do if we want only one log record? :smirk:
Answer: Dunno... :scream:
Reaction: Really? So, have a look below! :sunglasses:, (*7)

We will "improve" our logging โ†“โ†“โ†“

<?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);
    }
    ...
}

Question: Much better! What do you think?
Answer: But but but moooom, in this case I can log these messages only with one type and I don't know, for which one is the context data...
Reaction: Yop, you are right... :sweat_smile:
However, you can use our WorkflowLogger! :bowtie:, (*8)

Now the real magic with Yep\WorkflowLogger\Logger! :sunglasses: โ†“โ†“โ†“

<?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);
Log result
[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!"} []

Reaction: :flushed: :scream:, (*9)

Hints

  • You can use the same workflow more times until is locked during finish or manually by lock method.
    If you want to get the same workflow just call $logger->workflow($key) with key as the first argument.
    Every time you will call that method, logger will give you the same workflow until is locked. :sunglasses:
  • If you want to use \Monolog\Formatter\ChromePHPFormatter, \Monolog\Formatter\GelfMessageFormatter, \Monolog\Formatter\WildfireFormatter or similar with freezed log Levels, you have to use \Yep\WorkflowLogger\MonologFormatterAdapter.
  • Do you know, that you can indent the workflow message? Yep, you really can. Just use second argument of Yep\WorkflowLogger\Formatter\StandardFormatter($dumper, $indent). :wink:

That's all. I hope you like it. :kissing_smiling_eyes:, (*10)

The Versions

02/10 2017

dev-master

9999999-dev https://github.com/YepFoundation/workflow-logger

Workflow logger

  Sources   Download

GPL-3.0 BSD-3-Clause GPL-2.0

The Requires

 

The Development Requires

logger log logging workflow

02/10 2017

v1.3.0

1.3.0.0 https://github.com/YepFoundation/workflow-logger

Workflow logger

  Sources   Download

GPL-3.0 BSD-3-Clause GPL-2.0

The Requires

 

The Development Requires

logger log logging workflow

02/10 2017

v1.2.1

1.2.1.0 https://github.com/YepFoundation/workflow-logger

Workflow logger

  Sources   Download

GPL-3.0 BSD-3-Clause GPL-2.0

The Requires

 

The Development Requires

logger log logging workflow

02/10 2017

v1.2.0

1.2.0.0 https://github.com/YepFoundation/workflow-logger

Workflow logger

  Sources   Download

GPL-3.0 BSD-3-Clause GPL-2.0

The Requires

 

The Development Requires

logger log logging workflow

02/10 2017

v1.1.0

1.1.0.0 https://github.com/YepFoundation/workflow-logger

Workflow logger

  Sources   Download

GPL-3.0 BSD-3-Clause GPL-2.0

The Requires

 

The Development Requires

logger log logging workflow

02/10 2017

v1.0

1.0.0.0 https://github.com/YepFoundation/workflow-logger

Workflow logger

  Sources   Download

GPL-3.0 BSD-3-Clause GPL-2.0

The Requires

 

The Development Requires

logger log logging workflow