fname = preg_replace("/[\.][^\.]+$/", '', basename($fname_in)); if (!file_exists(LOG_PATH . "/{$this->fname}.log")) { touch(LOG_PATH . "/{$this->fname}.log"); } if (!is_writeable(LOG_PATH . "/{$this->fname}.log")) { self::err_handler("File " . realpath(LOG_PATH) . "/{$this->fname}.log is not writable", E_ERROR); } $log_level = Logger::ERROR; switch(LOG_LEVEL) { case E_WARNING: $log_level = Logger::WARNING; break; case E_NOTICE: $log_level = Logger::INFO; break; case E_DEBUG: $log_level = Logger::DEBUG; break; } $this->fh = new Logger($this->fname); $this->fh->pushHandler(new StreamHandler(LOG_PATH . "/{$this->fname}.log", $log_level)); if(PHP_SAPI == 'cli') { $stream = new StreamHandler("php://output", $log_level); $stream->setFormatter(new LineFormatter("%datetime% %level_name% %message%\n", "H:i:s.u")); $this->fh->pushHandler($stream); } } /** * Function to write to SQL error log file * * @param string $sql * SQL line that is the problem * @param integer $errno [optional] * Error number (Default is E_NOTICE) */ public static function sql_handler($sql, $errno = E_NOTICE) { if (!file_exists(LOG_PATH . "/sql_log")) { touch(LOG_PATH . "/sql_log"); } $dt = new DateTime(); $errlvl = 'NOTICE'; switch ($errno) { case E_USER_WARNING: case E_WARNING: $errlvl = "WARNING"; break; case E_USER_ERROR: case E_ERROR: $errlvl = "ERROR"; break; case E_DEBUG: $errlvl = "DEBUG"; break; default: } $errmsg = "{$dt->format(DateTime::ISO8601)} - $errlvl - $sql" . PHP_EOL; file_put_contents(realpath(LOG_PATH . "/sql_log"), $errmsg, FILE_APPEND); if ($errno == E_ERROR) { die($sql . PHP_EOL); } elseif ($errno == E_DEBUG && LOG_LEVEL == E_DEBUG && substr(php_sapi_name(), 0, 3) == 'cli') { print $errmsg; } } /** * Function to write application error to log file * * @param string $errmsg * Error message to write * @param integer $errno [optional] * Error number (Default is E_NOTICE) */ public static function err_handler($errmsg, $errno = E_NOTICE) { if (!file_exists(LOG_PATH . "/sagacity.log")) { touch(LOG_PATH . "/sagacity.log"); } $dt = new DateTime(); $str = "{$dt->format(DateTime::ISO8601)} - "; switch ($errno) { case E_USER_WARNING: case E_WARNING: $str .= "WARNING"; break; case E_USER_ERROR: case E_ERROR: $str .= "ERROR"; break; case E_USER_NOTICE: case E_NOTICE: $str .= "NOTICE"; break; case E_DEBUG: $str .= "DEBUG"; break; default: } file_put_contents(realpath(LOG_PATH . "/sagacity.log"), "$str - $errmsg" . PHP_EOL, FILE_APPEND); if ($errno == E_ERROR || $errno == E_USER_ERROR) { die($errmsg . PHP_EOL); } if ($errno == E_DEBUG && LOG_LEVEL == E_DEBUG && substr(php_sapi_name(), 0, 3) == 'cli') { print "$str - $errmsg" . PHP_EOL; } } /** * Function to output a message to the script log file * * @param string $errmsg * @param integer $errno [optional] */ public function script_log($errmsg, $errno = E_NOTICE) { if (!is_a($this->fh, "Monolog\Logger")) { return; } switch($errno) { case E_ERROR: $this->fh->error($errmsg); die; break; case E_WARNING: $this->fh->warning($errmsg); break; case E_NOTICE: $this->fh->info($errmsg); break; case E_DEBUG: $this->fh->debug($errmsg); break; default: $this->fh->emergency($errmsg); die; } } }