*/
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 bool $collect Whether to collect logs. @see setCollect()
* @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 );
+ * @param bool $collectContext Whether to keep the context passed to log.
+ * @since 1.29 @see setCollectContext()
*/
- 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;
}
/**
* Set the "collect" flag
* @param bool $collect
+ * @return TestLogger $this
*/
public function setCollect( $collect ) {
$this->collect = $collect;
+ return $this;
+ }
+
+ /**
+ * Set the collectContext flag
+ *
+ * @param bool $collectContext
+ * @since 1.29
+ * @return TestLogger $this
+ */
+ public function setCollectContext( $collectContext ) {
+ $this->collectContext = $collectContext;
+ return $this;
}
/**
* 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;
$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: