From 0cbb21ece8ab3ed516eb60615a3a20a0e1e60b5f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 27 Oct 2017 17:58:32 +0200 Subject: [PATCH] Added build/log/core --- build/log/core/FileDriver.php | 134 ++++++++++++++++++++++++++++++++++ build/log/core/Log.php | 83 +++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100755 build/log/core/FileDriver.php create mode 100755 build/log/core/Log.php diff --git a/build/log/core/FileDriver.php b/build/log/core/FileDriver.php new file mode 100755 index 0000000..7d364c7 --- /dev/null +++ b/build/log/core/FileDriver.php @@ -0,0 +1,134 @@ + Path of the needed file + * + * @return created If the file has been created successfully + * + */ + public static function create($file){ + /* (0) Checks arguments */ + if( !is_string($file) || is_dir($file) ) + return false; + + /* (1) Creates file */ + try{ + return fclose( fopen($file, 'w') ); + }catch(\Exception $e){ return false; } + } + + + /* READS FILE'S CONTENT + * + * @file File to read + * + */ + public static function read($file){ + /* (0) Checks arguments */ + if( !is_string($file) ) + throw new \Exception('Wrong argument for read().'); + + /* (1) Initializing driver on file (read-flag) */ + $driver = new \SplFileObject($file, 'r'); + + /* (2) Read lines */ + $read = ''; + + $line = 0; + while( $driver->current() ){ + $read .= $driver->current(); + $driver->next(); + } + + /* (3) Returns result */ + return $read; + } + + /* READS A FILE'S SPECIFIC LINE + * + * @file File to read + * @line Line to read + * + */ + public static function readline($file, $line){ + /* (0) Checks arguments */ + if( !is_string($file) || intval($line) !== $line ) + throw new \Exception('Wrong argument for readline(, ).'); + + /* (1) Initializing driver on file (read-flag) */ + $driver = new \SplFileObject($file, 'r'); + + /* (2) Goto specific line */ + $driver->seek($line); + + /* (3) Return line's content */ + if( $driver->key() == $line ) + return $driver->current(); + else + return null; + } + + + /* WRITES CONTENT TO A FILE + * + * @file File to write to + * @content Content to write + * + * @return written Returns if the content have been written successfully + * + * @note: Creates file if it is possible with `fopen()` + * + */ + public static function write($file, $content){ + /* (0) Checks arguments */ + if( !is_string($file) || !is_string($content) ) + return false; + + /* (1) Erase file */ + try{ + fclose( fopen($file, 'w') ); + }catch(\Exception $e){ return false; } + + /* (2) Get driver (write-flag) */ + $driver = new \SplFileObject($file, 'r+'); + + /* (3) Writes content */ + return !is_null( $driver->fwrite($content) ); + + } + + + /* APPENDS CONTENT TO A FILE + * + * @file File to append content to + * @content Content to append + * + * @return append Returns if the content have been append successfully + * + * @note: If file doesn't exists, returns false + * + */ + public static function append($file, $content){ + /* (0) Checks arguments */ + if( !is_file($file) || !is_string($content) ) + return false; + + /* (1) Get driver (append-flag) */ + $driver = new \SplFileObject($file, 'a'); + + /* (2) append content */ + return !is_null( $driver->fwrite($content.PHP_EOL) ); + } + + + } + +?> diff --git a/build/log/core/Log.php b/build/log/core/Log.php new file mode 100755 index 0000000..be8472f --- /dev/null +++ b/build/log/core/Log.php @@ -0,0 +1,83 @@ + Label of the logger + * + =========================================================*/ + private function __construct($label){ + /* (1) Set logfile and label */ + $this->label = $label; + $this->file = __BUILD__."/log/log/$label.log"; + + /* (2) Create file if doesn't exist already */ + if( !is_file($this->file) ) + FileDriver::create($this->file); + } + + + /* [3] Writes a new log to the file + * + * @content Content to log + * @tag [OPT] Tag of the log (category) + * + * @return outputname outputdesc + * + =========================================================*/ + public function log($content="...", $tag="default"){ + /* (1) Get time data */ + $timestamp = time(); + $date = date('Y-m-s H:i:s', $timestamp); + + /* (2) Create beginning string */ + $body = "$timestamp | $date | [$tag] "; + $headerl = strlen($body); + + /* (3) Split content by length */ + $body .= substr($content, 0, self::$maxlen); + + for( $i = self::$maxlen, $l = strlen($content) ; $i < $l ; $i += self::$maxlen ) + $body .= "\n".str_repeat(" ", $headerl).substr($content, $i, self::$maxlen); + + /* (4) Append to log file */ + FileDriver::append($this->file, $body); + } + + + + + + + /* [4] Multiton attributes + =========================================================*/ + private static $instance = []; // instances + + /* [5] Multiton Manager + * + * @label Label of the logger you want + * + * @return instance instance of the wanted logger + * + =========================================================*/ + public static function get($label="default"){ + /* (1) Create if doesn't exist */ + if( !isset(self::$instance[$label]) ) + self::$instance[$label] = new Log($label); + + /* (2) Return instance for all cases */ + return self::$instance[$label]; + } + + }