File Manager

Current Directory: /home/astoriaah/www/old15/administrator/components/com_akeeba/alice/utils
Viewing File: /home/astoriaah/www/old15/administrator/components/com_akeeba/alice/utils/logger.php
<?php /** * Akeeba Engine * The modular PHP5 site backup engine * * @copyright Copyright (c)2009-2014 Nicholas K. Dionysopoulos * @license GNU GPL version 3 or, at your option, any later version * @package akeebaengine * */ // Protection against direct access defined('AKEEBAENGINE') or die(); /** * Writes messages to the backup log file * I couldn't extend the extisting one since there were a lot of "self" calls instead of "static", * and inheritance wouldn't work. */ class AliceUtilLogger { public static $logName = null; static function ResetLog($tag) { $oldLogName = AliceUtilLogger::$logName; AliceUtilLogger::$logName = AliceUtilLogger::logName($tag); $defaultLog = self::logName(null); // Close the file if it's open if ($oldLogName == AliceUtilLogger::$logName) { self::WriteLog(null); } // Remove any old log file @unlink(AliceUtilLogger::$logName); if ( !empty($tag)) { // Rename the default log (if it exists) to the new name @rename($defaultLog, AliceUtilLogger::$logName); } // Touch the log file $fp = @fopen(AliceUtilLogger::$logName, 'w'); if ($fp !== false) { @fclose($fp); } // Delete the default log if ( !empty($tag)) { @unlink($defaultLog); } @chmod(AliceUtilLogger::$logName, 0666); self::WriteLog(true, ''); } static function WriteLog($level, $message = '') { static $oldLog = null; static $configuredLoglevel; static $site_root_untranslated; static $site_root; static $fp = null; // Make sure we have a log name if (empty(self::$logName)) { self::$logName = self::logName(); } // Check for log name changes if (is_null($oldLog)) { $oldLog = self::$logName; } elseif ($oldLog != self::$logName) { // The log file changed. Close the old log. if (is_resource($fp)) { @fclose($fp); } $fp = null; } // Close the log file if the level is set to NULL if (is_null($level) && !is_null($fp)) { @fclose($fp); $fp = null; return; } if (empty($site_root) || empty($site_root_untranslated)) { $site_root_untranslated = \Akeeba\Engine\Platform::getInstance()->get_site_root(); $site_root = \Akeeba\Engine\Factory::getFilesystemTools() ->TranslateWinPath($site_root_untranslated); } if (empty($configuredLoglevel) or ($level === true)) { // Load the registry and fetch log level $registry = \Akeeba\Engine\Factory::getConfiguration(); $configuredLoglevel = $registry->get('akeeba.basic.log_level'); $configuredLoglevel = $configuredLoglevel * 1; return; } if ($level === false) { // Pause logging $configuredLogLevel = false; return; } // Catch paused logging if ($configuredLoglevel === false) { return; } if (($configuredLoglevel >= $level) && ($configuredLoglevel != 0)) { if ( !defined('AKEEBADEBUG')) { $message = str_replace($site_root_untranslated, "<root>", $message); $message = str_replace($site_root, "<root>", $message); } $message = str_replace("\n", ' \n ', $message); switch ($level) { case _AE_LOG_ERROR: $string = "ERROR |"; break; case _AE_LOG_WARNING: $string = "WARNING |"; break; case _AE_LOG_INFO: $string = "INFO |"; break; default: $string = "DEBUG |"; break; } $string .= @strftime("%y%m%d %H:%M:%S") . "|$message\r\n"; if (is_null($fp)) { $fp = @fopen(AliceUtilLogger::$logName, "a"); } if ( !($fp === false)) { $result = @fwrite($fp, $string); if ($result === false) { // Try harder with the file pointer, will ya? $fp = @fopen(AliceUtilLogger::$logName, "a"); $result = @fwrite($fp, $string); } } } } /** * Calculates the absolute path to the log file. Instead of using the path coming from * Akeeba Backup config, we will always use Joomla Tmp dir * * @param string $tag The backup run's tag * * @return string The absolute path to the log file */ public static function logName($tag = null) { if (empty($tag)) { $fileName = 'akeeba.log'; } else { $fileName = "akeeba.$tag.log"; } // Get log's file name return \Akeeba\Engine\Factory::getFilesystemTools() ->TranslateWinPath(JPATH_ROOT . '/tmp' . DIRECTORY_SEPARATOR . $fileName); } public static function closeLog() { self::WriteLog(null, null); } public static function openLog($tag = null) { self::$logName = self::logName($tag); @touch(self::$logName); } } // Make sure we close the log file every time we finish with a page load register_shutdown_function(array('AliceUtilLogger', 'closeLog'));