--- /dev/null
+<?php
+
+namespace RedBeanPHP\Logger;
+
+use RedBeanPHP\Logger as Logger;
+use RedBeanPHP\RedException as RedException;
+
+/**
+ * Logger. Provides a basic logging function for RedBeanPHP.
+ *
+ * @file RedBeanPHP/Logger.php
+ * @author Gabor de Mooij and the RedBeanPHP Community
+ * @license BSD/GPLv2
+ *
+ * @copyright
+ * copyright (c) G.J.G.T. (Gabor) de Mooij
+ * This source file is subject to the BSD/GPLv2 License that is bundled
+ * with this source code in the file license.txt.
+ */
+class RDefault implements Logger
+{
+ /**
+ * Logger modes
+ */
+ const C_LOGGER_ECHO = 0;
+ const C_LOGGER_ARRAY = 1;
+
+ /**
+ * @var integer
+ */
+ protected $mode = 0;
+
+ /**
+ * @var array
+ */
+ protected $logs = array();
+
+ /**
+ * Default logger method logging to STDOUT.
+ * This is the default/reference implementation of a logger.
+ * This method will write the message value to STDOUT (screen) unless
+ * you have changed the mode of operation to C_LOGGER_ARRAY.
+ *
+ * @param $message (optional) message to log (might also be data or output)
+ *
+ * @return void
+ */
+ public function log()
+ {
+ if ( func_num_args() < 1 ) return;
+
+ foreach ( func_get_args() as $argument ) {
+ if ( is_array( $argument ) ) {
+ $log = var_export( $argument, TRUE );
+ if ( $this->mode === self::C_LOGGER_ECHO ) {
+ echo $log;
+ } else {
+ $this->logs[] = $log;
+ }
+ } else {
+ if ( $this->mode === self::C_LOGGER_ECHO ) {
+ echo $argument;
+ } else {
+ $this->logs[] = $argument;
+ }
+ }
+
+ if ( $this->mode === self::C_LOGGER_ECHO ) echo "<br>" . PHP_EOL;
+ }
+ }
+
+ /**
+ * Returns the internal log array.
+ * The internal log array is where all log messages are stored.
+ *
+ * @return array
+ */
+ public function getLogs()
+ {
+ return $this->logs;
+ }
+
+ /**
+ * Clears the internal log array, removing all
+ * previously stored entries.
+ *
+ * @return self
+ */
+ public function clear()
+ {
+ $this->logs = array();
+ return $this;
+ }
+
+ /**
+ * Selects a logging mode.
+ * There are several options available.
+ *
+ * * C_LOGGER_ARRAY - log silently, stores entries in internal log array only
+ * * C_LOGGER_ECHO - also forward log messages directly to STDOUT
+ *
+ * @param integer $mode mode of operation for logging object
+ *
+ * @return self
+ */
+ public function setMode( $mode )
+ {
+ if ($mode !== self::C_LOGGER_ARRAY && $mode !== self::C_LOGGER_ECHO ) {
+ throw new RedException( 'Invalid mode selected for logger, use C_LOGGER_ARRAY or C_LOGGER_ECHO.' );
+ }
+ $this->mode = $mode;
+ return $this;
+ }
+
+ /**
+ * Searches for all log entries in internal log array
+ * for $needle and returns those entries.
+ * This method will return an array containing all matches for your
+ * search query.
+ *
+ * @param string $needle phrase to look for in internal log array
+ *
+ * @return array
+ */
+ public function grep( $needle )
+ {
+ $found = array();
+ foreach( $this->logs as $logEntry ) {
+ if ( strpos( $logEntry, $needle ) !== FALSE ) $found[] = $logEntry;
+ }
+ return $found;
+ }
+}