Optionally collect context in TestLogger
authorGergő Tisza <gtisza@wikimedia.org>
Fri, 4 Nov 2016 03:54:12 +0000 (03:54 +0000)
committerGergő Tisza <gtisza@wikimedia.org>
Fri, 4 Nov 2016 03:54:12 +0000 (03:54 +0000)
Change-Id: I3835b054ceac0fa0bcd58b41efa6bf78a0fafae7

tests/phpunit/includes/TestLogger.php

index 3cb20e1..7086a92 100644 (file)
@@ -33,16 +33,18 @@ use Psr\Log\LogLevel;
  */
 class TestLogger extends \Psr\Log\AbstractLogger {
        private $collect = false;
+       private $collectContext = false;
        private $buffer = [];
        private $filter = null;
 
        /**
         * @param bool $collect Whether to collect logs
         * @param callable $filter Filter logs before collecting/printing. Signature is
-        *  string|null function ( string $message, string $level );
+        *  string|null function ( string $message, string $level, array $context );
         */
-       public function __construct( $collect = false, $filter = null ) {
+       public function __construct( $collect = false, $filter = null, $collectContext = false ) {
                $this->collect = $collect;
+               $this->collectContext = $collectContext;
                $this->filter = $filter;
        }
 
@@ -56,7 +58,8 @@ class TestLogger extends \Psr\Log\AbstractLogger {
 
        /**
         * Return the collected logs
-        * @return array Array of array( string $level, string $message )
+        * @return array Array of array( string $level, string $message ), or
+        *   array( string $level, string $message, array $context ) if $collectContext was true.
         */
        public function getBuffer() {
                return $this->buffer;
@@ -73,14 +76,18 @@ class TestLogger extends \Psr\Log\AbstractLogger {
                $message = trim( $message );
 
                if ( $this->filter ) {
-                       $message = call_user_func( $this->filter, $message, $level );
+                       $message = call_user_func( $this->filter, $message, $level, $context );
                        if ( $message === null ) {
                                return;
                        }
                }
 
                if ( $this->collect ) {
-                       $this->buffer[] = [ $level, $message ];
+                       if ( $this->collectContext ) {
+                               $this->buffer[] = [ $level, $message, $context ];
+                       } else {
+                               $this->buffer[] = [ $level, $message ];
+                       }
                } else {
                        switch ( $level ) {
                                case LogLevel::DEBUG: