Sid Gifari File Manager
π Root
/
home
/
ailwtbdh
/
public_html
/
wp-content
/
plugins
/
custom-max-to-ui
/
includes
/
Editing: logger.php
<?php /** * ΠΠ»Π°ΡΡ Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΡΠΎΠ²Π½ΡΠΌΠΈ ΠΈ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ * * @package My_Monitoring_Plugin */ // ΠΠ°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Ρ if (!defined('ABSPATH')) { exit; } /** * ΠΠ»Π°ΡΡ Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ */ class My_Monitoring_Logger { /** * Π£ΡΠΎΠ²Π½ΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ */ const LEVEL_DEBUG = 0; const LEVEL_INFO = 1; const LEVEL_WARNING = 2; const LEVEL_ERROR = 3; const LEVEL_CRITICAL = 4; /** * ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° * * @var My_Monitoring_Logger|null */ private static $instance = null; /** * Π’Π΅ΠΊΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ * * @var int */ private $log_level; /** * ΠΡΡΡ ΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² * * @var string */ private $log_dir; /** * ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° Π»ΠΎΠ³Π° Π² Π±Π°ΠΉΡΠ°Ρ (10MB) * * @var int */ private $max_file_size = 10485760; /** * ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΡΠΎΡΠ°ΡΠΈΠΈ * * @var int */ private $max_files = 5; /** * ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° (Singleton) * * @return My_Monitoring_Logger */ public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } /** * ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ */ private function __construct() { $this->log_level = get_option('my_monitoring_log_level', self::LEVEL_INFO); $this->log_dir = WP_CONTENT_DIR . '/my-monitoring-logs'; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, Π΅ΡΠ»ΠΈ Π΅Ρ Π½Π΅Ρ if (!file_exists($this->log_dir)) { wp_mkdir_p($this->log_dir); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ .htaccess Π΄Π»Ρ Π·Π°ΡΠΈΡΡ Π»ΠΎΠ³ΠΎΠ² $htaccess_content = "Order deny,allow\nDeny from all"; file_put_contents($this->log_dir . '/.htaccess', $htaccess_content); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ index.php Π΄Π»Ρ Π·Π°ΡΠΈΡΡ file_put_contents($this->log_dir . '/index.php', '<?php // Silence is golden'); } } /** * Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ * * @param int $level Π£ΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ */ public function set_log_level($level) { $this->log_level = $level; update_option('my_monitoring_log_level', $level); } /** * ΠΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ * * @return int */ public function get_log_level() { return $this->log_level; } /** * ΠΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * * @param string $message Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * @param int $level Π£ΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ * @param array $context ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ */ public function log($message, $level = self::LEVEL_INFO, $context = array()) { // ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΡΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ if ($level < $this->log_level) { return; } $level_name = $this->get_level_name($level); $timestamp = current_time('mysql'); $context_str = !empty($context) ? ' | Context: ' . json_encode($context, JSON_UNESCAPED_UNICODE) : ''; $log_message = sprintf( '[%s] [%s] %s%s%s', $timestamp, $level_name, $message, $context_str, PHP_EOL ); // ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² ΡΠ°ΠΉΠ» $this->write_to_file($log_message, $level); // Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² error_log WordPress Π΄Π»Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ if ($level >= self::LEVEL_ERROR) { error_log('My Monitoring Plugin [' . $level_name . ']: ' . $message); } } /** * ΠΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * * @param string $message Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * @param array $context ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ */ public function debug($message, $context = array()) { $this->log($message, self::LEVEL_DEBUG, $context); } /** * ΠΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * * @param string $message Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * @param array $context ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ */ public function info($message, $context = array()) { $this->log($message, self::LEVEL_INFO, $context); } /** * ΠΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ * * @param string $message Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * @param array $context ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ */ public function warning($message, $context = array()) { $this->log($message, self::LEVEL_WARNING, $context); } /** * ΠΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ * * @param string $message Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * @param array $context ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ */ public function error($message, $context = array()) { $this->log($message, self::LEVEL_ERROR, $context); } /** * ΠΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ * * @param string $message Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * @param array $context ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ */ public function critical($message, $context = array()) { $this->log($message, self::LEVEL_CRITICAL, $context); } /** * ΠΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ * * @param int $level Π£ΡΠΎΠ²Π΅Π½Ρ * @return string */ private function get_level_name($level) { $levels = array( self::LEVEL_DEBUG => 'DEBUG', self::LEVEL_INFO => 'INFO', self::LEVEL_WARNING => 'WARNING', self::LEVEL_ERROR => 'ERROR', self::LEVEL_CRITICAL => 'CRITICAL', ); return isset($levels[$level]) ? $levels[$level] : 'UNKNOWN'; } /** * ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ» Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ * * @param string $message Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ * @param int $level Π£ΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ */ private function write_to_file($message, $level) { $log_file = $this->log_dir . '/monitoring-' . date('Y-m-d') . '.log'; // ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΎΡΠ°ΡΠΈΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ if (file_exists($log_file) && filesize($log_file) > $this->max_file_size) { $this->rotate_logs(); } // ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² ΡΠ°ΠΉΠ» file_put_contents($log_file, $message, FILE_APPEND | LOCK_EX); } /** * Π ΠΎΡΠ°ΡΠΈΡ Π»ΠΎΠ³ΠΎΠ² */ private function rotate_logs() { $today = date('Y-m-d'); $log_file = $this->log_dir . '/monitoring-' . $today . '.log'; // ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ°ΠΉΠ» if (file_exists($log_file)) { $rotated_file = $this->log_dir . '/monitoring-' . $today . '-' . time() . '.log'; rename($log_file, $rotated_file); } // Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π΅ΡΠ»ΠΈ ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ° $log_files = glob($this->log_dir . '/monitoring-*.log'); if (count($log_files) > $this->max_files) { // Π‘ΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ usort($log_files, function($a, $b) { return filemtime($a) - filemtime($b); }); // Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠ΅ ΡΡΠ°ΡΡΠ΅ $files_to_delete = array_slice($log_files, 0, count($log_files) - $this->max_files); foreach ($files_to_delete as $file) { @unlink($file); } } } /** * ΠΡΠΈΡΡΠΈΡΡ Π²ΡΠ΅ Π»ΠΎΠ³ΠΈ * * @return bool Π£ΡΠΏΠ΅ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ */ public function clear_logs() { $log_files = glob($this->log_dir . '/monitoring-*.log'); foreach ($log_files as $file) { @unlink($file); } return true; } /** * ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π»ΠΎΠ³Π° * * @param int $lines ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ * @return array ΠΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ Π»ΠΎΠ³Π° */ public function get_recent_logs($lines = 100) { $log_file = $this->log_dir . '/monitoring-' . date('Y-m-d') . '.log'; if (!file_exists($log_file)) { return array(); } $file_lines = file($log_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); if ($file_lines === false) { return array(); } return array_slice($file_lines, -$lines); } }
Save
Cancel