From 299198f7181fccf1e9a684649d173a1ebbdfbd1e Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Mon, 5 Mar 2018 12:04:28 -0800 Subject: Move SimpleLogger lib into app source tree --- app/Core/Log/Base.php | 89 ++++++++++++++++++++++++++++++++++++++++++++++ app/Core/Log/File.php | 48 +++++++++++++++++++++++++ app/Core/Log/Logger.php | 94 +++++++++++++++++++++++++++++++++++++++++++++++++ app/Core/Log/Stderr.php | 25 +++++++++++++ app/Core/Log/Stdout.php | 25 +++++++++++++ app/Core/Log/Syslog.php | 72 +++++++++++++++++++++++++++++++++++++ 6 files changed, 353 insertions(+) create mode 100644 app/Core/Log/Base.php create mode 100644 app/Core/Log/File.php create mode 100644 app/Core/Log/Logger.php create mode 100644 app/Core/Log/Stderr.php create mode 100644 app/Core/Log/Stdout.php create mode 100644 app/Core/Log/Syslog.php (limited to 'app/Core') diff --git a/app/Core/Log/Base.php b/app/Core/Log/Base.php new file mode 100644 index 00000000..3c3c8485 --- /dev/null +++ b/app/Core/Log/Base.php @@ -0,0 +1,89 @@ +level = $level; + } + + /** + * Get minimum log level + * + * @access public + * @return string + */ + public function getLevel() + { + return $this->level; + } + + /** + * Dump to log a variable (by example an array) + * + * @param mixed $variable + */ + public function dump($variable) + { + $this->log(LogLevel::DEBUG, var_export($variable, true)); + } + + /** + * Interpolates context values into the message placeholders. + * + * @access protected + * @param string $message + * @param array $context + * @return string + */ + protected function interpolate($message, array $context = array()) + { + // build a replacement array with braces around the context keys + $replace = array(); + + foreach ($context as $key => $val) { + $replace['{' . $key . '}'] = $val; + } + + // interpolate replacement values into the message and return + return strtr($message, $replace); + } + + /** + * Format log message + * + * @param mixed $level + * @param string $message + * @param array $context + * @return string + */ + protected function formatMessage($level, $message, array $context = array()) + { + return '['.date('Y-m-d H:i:s').'] ['.$level.'] '.$this->interpolate($message, $context).PHP_EOL; + } +} diff --git a/app/Core/Log/File.php b/app/Core/Log/File.php new file mode 100644 index 00000000..19260b3c --- /dev/null +++ b/app/Core/Log/File.php @@ -0,0 +1,48 @@ +filename = $filename; + } + + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string $message + * @param array $context + */ + public function log($level, $message, array $context = array()) + { + $line = $this->formatMessage($level, $message, $context); + + if (file_put_contents($this->filename, $line, FILE_APPEND | LOCK_EX) === false) { + throw new RuntimeException('Unable to write to the log file.'); + } + } +} diff --git a/app/Core/Log/Logger.php b/app/Core/Log/Logger.php new file mode 100644 index 00000000..4155a04e --- /dev/null +++ b/app/Core/Log/Logger.php @@ -0,0 +1,94 @@ +loggers[] = $logger; + } + + /** + * Proxy method to the real loggers + * + * @param mixed $level + * @param string $message + * @param array $context + * @return null + */ + public function log($level, $message, array $context = array()) + { + foreach ($this->loggers as $logger) { + if ($this->getLevelPriority($level) >= $this->getLevelPriority($logger->getLevel())) { + $logger->log($level, $message, $context); + } + } + } + + /** + * Dump variables for debugging + * + * @param mixed $variable + */ + public function dump($variable) + { + foreach ($this->loggers as $logger) { + if ($this->getLevelPriority(LogLevel::DEBUG) >= $this->getLevelPriority($logger->getLevel())) { + $logger->dump($variable); + } + } + } +} diff --git a/app/Core/Log/Stderr.php b/app/Core/Log/Stderr.php new file mode 100644 index 00000000..fbe82a8c --- /dev/null +++ b/app/Core/Log/Stderr.php @@ -0,0 +1,25 @@ +formatMessage($level, $message, $context), FILE_APPEND); + } +} diff --git a/app/Core/Log/Stdout.php b/app/Core/Log/Stdout.php new file mode 100644 index 00000000..99140801 --- /dev/null +++ b/app/Core/Log/Stdout.php @@ -0,0 +1,25 @@ +formatMessage($level, $message, $context), FILE_APPEND); + } +} diff --git a/app/Core/Log/Syslog.php b/app/Core/Log/Syslog.php new file mode 100644 index 00000000..3a354a88 --- /dev/null +++ b/app/Core/Log/Syslog.php @@ -0,0 +1,72 @@ +getSyslogPriority($level); + $syslogMessage = $this->interpolate($message, $context); + + syslog($syslogPriority, $syslogMessage); + } +} -- cgit v1.2.3