Файловый менеджер - Редактировать - /home/wuectly/www/03cbe/Log.php.tar
Назад
home/wuectly/www/libraries/src/Log/Log.php 0000604 00000022231 15245535750 0014541 0 ustar 00 <?php /** * Joomla! Content Management System * * @copyright (C) 2011 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\Log; defined('JPATH_PLATFORM') or die; /** * Joomla! Log Class * * This class hooks into the global log configuration settings to allow for user configured * logging events to be sent to where the user wishes them to be sent. On high load sites * Syslog is probably the best (pure PHP function), then the text file based loggers (CSV, W3c * or plain Formattedtext) and finally MySQL offers the most features (e.g. rapid searching) * but will incur a performance hit due to INSERT being issued. * * @since 1.7.0 */ class Log { /** * All log priorities. * * @var integer * @since 1.7.0 */ const ALL = 30719; /** * The system is unusable. * * @var integer * @since 1.7.0 */ const EMERGENCY = 1; /** * Action must be taken immediately. * * @var integer * @since 1.7.0 */ const ALERT = 2; /** * Critical conditions. * * @var integer * @since 1.7.0 */ const CRITICAL = 4; /** * Error conditions. * * @var integer * @since 1.7.0 */ const ERROR = 8; /** * Warning conditions. * * @var integer * @since 1.7.0 */ const WARNING = 16; /** * Normal, but significant condition. * * @var integer * @since 1.7.0 */ const NOTICE = 32; /** * Informational message. * * @var integer * @since 1.7.0 */ const INFO = 64; /** * Debugging message. * * @var integer * @since 1.7.0 */ const DEBUG = 128; /** * The global Log instance. * * @var Log * @since 1.7.0 */ protected static $instance; /** * Container for Logger configurations. * * @var array * @since 1.7.0 */ protected $configurations = array(); /** * Container for Logger objects. * * @var Logger[] * @since 1.7.0 */ protected $loggers = array(); /** * Lookup array for loggers. * * @var array * @since 1.7.0 */ protected $lookup = array(); /** * Constructor. * * @since 1.7.0 */ protected function __construct() { } /** * Method to add an entry to the log. * * @param mixed $entry The LogEntry object to add to the log or the message for a new LogEntry object. * @param integer $priority Message priority. * @param string $category Type of entry * @param string $date Date of entry (defaults to now if not specified or blank) * @param array $context An optional array with additional message context. * * @return void * * @since 1.7.0 */ public static function add($entry, $priority = self::INFO, $category = '', $date = null, array $context = array()) { // Automatically instantiate the singleton object if not already done. if (empty(static::$instance)) { static::setInstance(new Log); } // If the entry object isn't a LogEntry object let's make one. if (!($entry instanceof LogEntry)) { $entry = new LogEntry((string) $entry, $priority, $category, $date, $context); } static::$instance->addLogEntry($entry); } /** * Add a logger to the Log instance. Loggers route log entries to the correct files/systems to be logged. * * @param array $options The object configuration array. * @param integer $priorities Message priority * @param array $categories Types of entry * @param boolean $exclude If true, all categories will be logged except those in the $categories array * * @return void * * @since 1.7.0 */ public static function addLogger(array $options, $priorities = self::ALL, $categories = array(), $exclude = false) { // Automatically instantiate the singleton object if not already done. if (empty(static::$instance)) { static::setInstance(new Log); } static::$instance->addLoggerInternal($options, $priorities, $categories, $exclude); } /** * Add a logger to the Log instance. Loggers route log entries to the correct files/systems to be logged. * This method allows you to extend Log completely. * * @param array $options The object configuration array. * @param integer $priorities Message priority * @param array $categories Types of entry * @param boolean $exclude If true, all categories will be logged except those in the $categories array * * @return void * * @since 1.7.0 */ protected function addLoggerInternal(array $options, $priorities = self::ALL, $categories = array(), $exclude = false) { // The default logger is the formatted text log file. if (empty($options['logger'])) { $options['logger'] = 'formattedtext'; } $options['logger'] = strtolower($options['logger']); // Special case - if a Closure object is sent as the callback (in case of CallbackLogger) // Closure objects are not serializable so swap it out for a unique id first then back again later if (isset($options['callback'])) { if (is_a($options['callback'], 'closure')) { $callback = $options['callback']; $options['callback'] = spl_object_hash($options['callback']); } elseif (is_array($options['callback']) && count($options['callback']) == 2 && is_object($options['callback'][0])) { $callback = $options['callback']; $options['callback'] = spl_object_hash($options['callback'][0]) . '::' . $options['callback'][1]; } } // Generate a unique signature for the Log instance based on its options. $signature = md5(serialize($options)); // Now that the options array has been serialized, swap the callback back in if (isset($callback)) { $options['callback'] = $callback; } // Register the configuration if it doesn't exist. if (empty($this->configurations[$signature])) { $this->configurations[$signature] = $options; } $this->lookup[$signature] = (object) array( 'priorities' => $priorities, 'categories' => array_map('strtolower', (array) $categories), 'exclude' => (bool) $exclude, ); } /** * Creates a delegated PSR-3 compatible logger from the current singleton instance. This method always returns a new delegated logger. * * @return DelegatingPsrLogger * * @since 3.8.0 */ public static function createDelegatedLogger() { // Ensure a singleton instance has been created first if (empty(static::$instance)) { static::setInstance(new static); } return new DelegatingPsrLogger(static::$instance); } /** * Returns a reference to the a Log object, only creating it if it doesn't already exist. * Note: This is principally made available for testing and internal purposes. * * @param Log $instance The logging object instance to be used by the static methods. * * @return void * * @since 1.7.0 */ public static function setInstance($instance) { if (($instance instanceof Log) || $instance === null) { static::$instance = & $instance; } } /** * Method to add an entry to the appropriate loggers. * * @param LogEntry $entry The LogEntry object to send to the loggers. * * @return void * * @since 1.7.0 * @throws \RuntimeException */ protected function addLogEntry(LogEntry $entry) { // Find all the appropriate loggers based on priority and category for the entry. $loggers = $this->findLoggers($entry->priority, $entry->category); foreach ((array) $loggers as $signature) { // Attempt to instantiate the logger object if it doesn't already exist. if (empty($this->loggers[$signature])) { $class = __NAMESPACE__ . '\\Logger\\' . ucfirst($this->configurations[$signature]['logger']) . 'Logger'; if (!class_exists($class)) { throw new \RuntimeException('Unable to create a Logger instance: ' . $class); } $this->loggers[$signature] = new $class($this->configurations[$signature]); } // Add the entry to the logger. $this->loggers[$signature]->addEntry(clone $entry); } } /** * Method to find the loggers to use based on priority and category values. * * @param integer $priority Message priority. * @param string $category Type of entry * * @return array The array of loggers to use for the given priority and category values. * * @since 1.7.0 */ protected function findLoggers($priority, $category) { $loggers = array(); // Sanitize inputs. $priority = (int) $priority; $category = strtolower($category); // Let's go iterate over the loggers and get all the ones we need. foreach ((array) $this->lookup as $signature => $rules) { // Check to make sure the priority matches the logger. if ($priority & $rules->priorities) { if ($rules->exclude) { // If either there are no set categories or the category (including the empty case) is not in the list of excluded categories, add this logger. if (empty($rules->categories) || !in_array($category, $rules->categories)) { $loggers[] = $signature; } } else { // If either there are no set categories (meaning all) or the specific category is set, add this logger. if (empty($rules->categories) || in_array($category, $rules->categories)) { $loggers[] = $signature; } } } } return $loggers; } } home/wuectly/www/libraries/regularlabs/src/Log.php 0000604 00000006175 15245556134 0016333 0 ustar 00 <?php /** * @package Regular Labs Library * @version 21.4.10972 * * @author Peter van Westen <info@regularlabs.com> * @link http://www.regularlabs.com * @copyright Copyright © 2021 Regular Labs All Rights Reserved * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL */ namespace RegularLabs\Library; defined('_JEXEC') or die; use ActionlogsModelActionlog; use JLoader; use Joomla\CMS\Factory as JFactory; use Joomla\CMS\MVC\Model\BaseDatabaseModel as JModel; /** * Class Log * @package RegularLabs\Library */ class Log { public static function add($message, $languageKey, $context) { $user = JFactory::getUser(); $message['userid'] = $user->id; $message['username'] = $user->username; $message['accountlink'] = 'index.php?option=com_users&task=user.edit&id=' . $user->id; JLoader::register('ActionlogsHelper', JPATH_ADMINISTRATOR . '/components/com_actionlogs/helpers/actionlogs.php'); JLoader::register('ActionlogsModelActionlog', JPATH_ADMINISTRATOR . '/components/com_actionlogs/models/actionlog.php'); /* @var ActionlogsModelActionlog $model */ $model = JModel::getInstance('Actionlog', 'ActionlogsModel'); $model->addLog([$message], $languageKey, $context, $user->id); } public static function save($message, $context, $isNew) { $languageKey = $isNew ? 'PLG_SYSTEM_ACTIONLOGS_CONTENT_ADDED' : 'PLG_SYSTEM_ACTIONLOGS_CONTENT_UPDATED'; $message['action'] = $isNew ? 'add' : 'update'; self::add($message, $languageKey, $context); } public static function delete($message, $context) { $languageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_DELETED'; $message['action'] = 'deleted'; self::add($message, $languageKey, $context); } public static function changeState($message, $context, $value) { switch ($value) { case 0: $languageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_UNPUBLISHED'; $message['action'] = 'unpublish'; break; case 1: $languageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_PUBLISHED'; $message['action'] = 'publish'; break; case 2: $languageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_ARCHIVED'; $message['action'] = 'archive'; break; case -2: $languageKey = 'PLG_SYSTEM_ACTIONLOGS_CONTENT_TRASHED'; $message['action'] = 'trash'; break; default: return; } self::add($message, $languageKey, $context); } public static function install($message, $context, $type = 'component') { $languageKey = 'PLG_ACTIONLOG_JOOMLA_' . strtoupper($type) . '_INSTALLED'; if ( ! JFactory::getApplication()->getLanguage()->hasKey($languageKey)) { $languageKey = 'PLG_ACTIONLOG_JOOMLA_EXTENSION_INSTALLED'; } $message['action'] = 'install'; $message['type'] = 'PLG_ACTIONLOG_JOOMLA_TYPE_' . strtoupper($type); self::add($message, $languageKey, $context); } public static function uninstall($message, $context, $type = 'component') { $languageKey = 'PLG_ACTIONLOG_JOOMLA_EXTENSION_UNINSTALLED'; $message['action'] = 'uninstall'; $message['type'] = 'PLG_ACTIONLOG_JOOMLA_TYPE_' . strtoupper($type); self::add($message, $languageKey, $context); } } home/wuectly/www/administrator/components/com_akeeba/Controller/Log.php 0000604 00000006414 15245630316 0022512 0 ustar 00 <?php /** * @package akeebabackup * @copyright Copyright (c)2006-2023 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Backup\Admin\Controller; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Backup\Admin\Controller\Mixin\CustomACL; use Akeeba\Backup\Admin\Controller\Mixin\PredefinedTaskList; use Akeeba\Backup\Admin\Model\Log as LogModel; use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; use FOF40\Controller\Controller; class Log extends Controller { use CustomACL { CustomACL::onBeforeExecute as onCustomACLBeforeExecute; } /** @var bool */ private $noFlush = false; protected function onBeforeExecute(&$task) { $this->onCustomACLBeforeExecute($task); $profile_id = $this->input->getInt('profileid', null); if (!empty($profile_id) && is_numeric($profile_id) && ($profile_id > 0)) { $this->container->platform->setSessionVar('profile', $profile_id, 'akeeba'); } } /** * Display the log page * * @return void */ public function onBeforeDefault() { $tag = $this->input->get('tag', null, 'cmd'); $latest = $this->input->get('latest', false, 'int'); if (empty($tag)) { $tag = null; } /** @var LogModel $model */ $model = $this->getModel(); if ($latest) { $logFiles = $model->getLogFiles(); $tag = array_shift($logFiles); } $model->setState('tag', $tag); Platform::getInstance()->load_configuration(Platform::getInstance()->get_active_profile()); } /** * Renders the contents of the log, used inside the IFRAME of the log page * * @return void */ public function iframe() { $tag = $this->input->get('tag', null, 'cmd'); if (empty($tag)) { $tag = null; } /** @var LogModel $model */ $model = $this->getModel(); $model->setState('tag', $tag); Platform::getInstance()->load_configuration(Platform::getInstance()->get_active_profile()); $this->display(); } /** * Download the log file as a text file * * @return void */ public function download() { Platform::getInstance()->load_configuration(Platform::getInstance()->get_active_profile()); $tag = $this->input->get('tag', null, 'cmd'); if (empty($tag)) { $tag = null; } $asAttachment = $this->input->getBool('attachment', true); @ob_end_clean(); // In case some braindead plugin spits its own HTML header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past header("Content-Description: File Transfer"); header('Content-Type: text/plain'); if ($asAttachment) { header('Content-Disposition: attachment; filename="Akeeba Backup Debug Log.txt"'); } /** @var LogModel $model */ $model = $this->getModel(); $model->setState('tag', $tag); $model->echoRawLog(); if (!$this->noFlush) { flush(); } $this->container->platform->closeApplication(); } public function inlineRaw() { Platform::getInstance()->load_configuration(Platform::getInstance()->get_active_profile()); $tag = $this->input->get('tag', null, 'cmd'); if (empty($tag)) { $tag = null; } /** @var LogModel $model */ $model = $this->getModel(); $model->setState('tag', $tag); echo "<pre>"; $model->echoRawLog(); echo "</pre>"; } } home/wuectly/www/administrator/components/com_akeeba/Model/Log.php 0000604 00000012177 15245630440 0021430 0 ustar 00 <?php /** * @package akeebabackup * @copyright Copyright (c)2006-2023 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Backup\Admin\Model; // Protect from unauthorized access defined('_JEXEC') || die(); use Akeeba\Engine\Factory; use FOF40\Model\Model; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; class Log extends Model { /** * Get an array with the names of all log files in this backup profile * * @param bool $onlyFailed Should I only return the log files of backups marked as failed? * * @return string[] */ public function getLogFiles(bool $onlyFailed = false): array { $configuration = Factory::getConfiguration(); $outdir = $configuration->get('akeeba.basic.output_directory'); $files = Factory::getFileLister()->getFiles($outdir); $ret = []; if (!empty($files) && is_array($files)) { foreach ($files as $filename) { $baseName = basename($filename); $startsWithAkeeba = substr($baseName, 0, 7) == 'akeeba.'; $endsWithLog = substr($baseName, -4) == '.log'; $endsWithPhpLog = substr($baseName, -8) == '.log.php'; $isDefaultLog = $baseName == 'akeeba.log'; if ($startsWithAkeeba && ($endsWithLog || $endsWithPhpLog) && !$isDefaultLog) { /** * Extract the tag from the filename (akeeba.tag.log or akeeba.tag.log.php) * * We ignore the first seven characters ("akeeba.") and the last X characters, where X is 8 if the * log file name ends with .log.php or 4 if the log name ends with .log. */ $tag = substr($baseName, 7, -($endsWithPhpLog ? 8 : 4)); if (empty($tag)) { continue; } $parts = explode('.', $tag); $key = array_pop($parts); $key = str_replace('id', '', $key); $key = is_numeric($key) ? sprintf('%015u', $key) : $key; if (empty($parts)) { $key = str_repeat('0', 15) . '.' . $key; } else { $key .= '.' . implode('.', $parts); } $ret[$key] = $tag; } } } if ($onlyFailed) { $ret = $this->keepOnlyFailedLogs($ret); } krsort($ret); return $ret; } /** * Gets the JHtml options list for selecting a log file * * @param bool $onlyFailed Should I only return the log files of backups marked as failed? * * @return array */ public function getLogList(bool $onlyFailed = false): array { $origin = null; $options = []; $list = $this->getLogFiles($onlyFailed); if (!empty($list)) { $options[] = HTMLHelper::_('select.option', null, Text::_('COM_AKEEBA_LOG_CHOOSE_FILE_VALUE')); foreach ($list as $item) { $text = Text::_('COM_AKEEBA_BUADMIN_LABEL_ORIGIN_' . $item); if (strstr($item, '.') !== false) { [$origin, $backupId] = explode('.', $item, 2); $text = Text::_('COM_AKEEBA_BUADMIN_LABEL_ORIGIN_' . $origin) . ' (' . $backupId . ')'; } $options[] = HTMLHelper::_('select.option', $item, $text); } } return $options; } /** * Output the raw text log file to the standard output without the PHP die header * * @param bool $withHeader Should I include a header telling the user how to submit this file? * * @return void */ public function echoRawLog($withHeader = true) { $tag = $this->getState('tag', ''); $logFile = Factory::getLog()->getLogFilename($tag); if (!@is_file($logFile) && @file_exists(substr($logFile, 0, -4))) { /** * Transitional period: the log file akeeba.tag.log.php may not exist but the akeeba.tag.log does. This * addresses this transition. */ $logFile = substr($logFile, 0, -4); } if ($withHeader) { echo "WARNING: Do not copy and paste lines from this file!\r\n"; echo "You are supposed to ZIP and attach it in your support forum post.\r\n"; echo "If you fail to do so, we will be unable to provide efficient support.\r\n"; echo "\r\n"; echo "--- START OF RAW LOG --\r\n"; } // The at sign (silence operator) is necessary to prevent PHP showing a warning if the file doesn't exist or // isn't readable for any reason. $fp = @fopen($logFile, 'r'); if ($fp === false) { if ($withHeader) { echo "--- END OF RAW LOG ---\r\n"; } return; } $firstLine = @fgets($fp); if (substr($firstLine, 0, 5) != '<' . '?' . 'php') { @fclose($fp); @readfile($logFile); } else { while (!feof($fp)) { echo rtrim(fgets($fp)) . "\r\n"; } @fclose($fp); } if ($withHeader) { echo "--- END OF RAW LOG ---\r\n"; } } protected function keepOnlyFailedLogs($logs) { $db = $this->container->db; $query = $db->getQuery(true) ->select([ $db->quoteName('tag'), $db->quoteName('backupid'), ]) ->from($db->quoteName('#__ak_stats')) ->where($db->quoteName('status') . ' = ' . $db->quote('fail')); $failedBackups = $db->setQuery($query)->loadObjectList() ?: []; if (empty($failedBackups)) { return []; } $failedBackups = array_map(function ($o) { $tag = $o->tag ?? ''; return (empty($tag) ? '' : '.') . $o->backupid; }, $failedBackups); return array_intersect($logs, $failedBackups); } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.34 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка