display_recent_logs($log_level, $search); break; case 'subscription': $this->display_subscription_logs($log_level, $search); break; case 'payment': $this->display_payment_logs($log_level, $search); break; case 'error': $this->display_error_logs($search); break; case 'settings': $this->display_log_settings(); break; } ?>
get_filtered_logs($level, $search, 100); $this->render_log_table($logs); } /** * 显示订阅日志 */ private function display_subscription_logs($level = 'all', $search = '') { $logs = $this->get_filtered_logs($level, $search, 100, 'subscription'); $this->render_log_table($logs); } /** * 显示支付日志 */ private function display_payment_logs($level = 'all', $search = '') { $logs = $this->get_filtered_logs($level, $search, 100, 'payment'); $this->render_log_table($logs); } /** * 显示错误日志 */ private function display_error_logs($search = '') { $logs = $this->get_filtered_logs('error', $search, 100); $this->render_log_table($logs); } /** * 显示日志设置 */ private function display_log_settings() { $log_level = get_option('yoone_log_level', 'info'); $log_retention = get_option('yoone_log_retention_days', 30); $enable_debug = get_option('yoone_enable_debug_logging', false); if (isset($_POST['save_log_settings'])) { check_admin_referer('yoone_log_settings'); update_option('yoone_log_level', sanitize_text_field($_POST['log_level'])); update_option('yoone_log_retention_days', absint($_POST['log_retention'])); update_option('yoone_enable_debug_logging', isset($_POST['enable_debug'])); echo '

' . __('设置已保存', 'yoone-subscriptions') . '

'; } ?>

' . __('没有找到日志记录', 'yoone-subscriptions') . ''; return; } ?>
parse_log_line($log_line); if (!$parsed_log) { continue; } // 级别过滤 if ($level !== 'all' && $parsed_log['level'] !== $level) { continue; } // 类型过滤 if ($type && strpos($parsed_log['message'], $type) === false) { continue; } // 搜索过滤 if ($search && stripos($parsed_log['message'], $search) === false && stripos($parsed_log['context'], $search) === false) { continue; } $filtered_logs[] = $parsed_log; if (count($filtered_logs) >= $limit) { break; } } return $filtered_logs; } /** * 解析日志行 */ private function parse_log_line($log_line) { // 简单的日志解析,实际应该根据WooCommerce日志格式调整 if (preg_match('/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2})\s+(\w+)\s+(.+)$/', $log_line, $matches)) { $context = ''; $message = $matches[3]; // 提取JSON上下文 if (preg_match('/^(.+?)\s+(\{.+\})$/', $message, $msg_matches)) { $message = $msg_matches[1]; $context = $msg_matches[2]; } return array( 'timestamp' => $matches[1], 'level' => strtolower($matches[2]), 'message' => $message, 'context' => $context ); } return false; } /** * AJAX清空日志 */ public function ajax_clear_logs() { check_ajax_referer('yoone_admin_nonce', 'nonce'); if (!current_user_can('manage_options')) { wp_die(__('权限不足', 'yoone-subscriptions')); } $log_file = Yoone_Logger::get_log_file_path(); if (file_exists($log_file)) { file_put_contents($log_file, ''); } wp_send_json_success(array('message' => __('日志已清空', 'yoone-subscriptions'))); } /** * AJAX下载日志 */ public function ajax_download_logs() { check_ajax_referer('yoone_admin_nonce', 'nonce'); if (!current_user_can('manage_options')) { wp_die(__('权限不足', 'yoone-subscriptions')); } $log_file = Yoone_Logger::get_log_file_path(); if (!file_exists($log_file)) { wp_die(__('日志文件不存在', 'yoone-subscriptions')); } header('Content-Type: text/plain'); header('Content-Disposition: attachment; filename="yoone-subscriptions-' . date('Y-m-d') . '.log"'); header('Content-Length: ' . filesize($log_file)); readfile($log_file); exit; } /** * 加载脚本 */ public function enqueue_scripts($hook) { if ($hook !== 'yoone-subscriptions_page_yoone-logs') { return; } wp_enqueue_script( 'yoone-admin-logs', YOONE_SUBSCRIPTIONS_PLUGIN_URL . 'assets/js/admin-logs.js', array('jquery'), YOONE_SUBSCRIPTIONS_VERSION, true ); wp_localize_script('yoone-admin-logs', 'yoone_logs_params', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('yoone_admin_nonce'), 'i18n' => array( 'confirm_clear' => __('确定要清空所有日志吗?此操作不可恢复。', 'yoone-subscriptions'), 'clearing' => __('正在清空...', 'yoone-subscriptions'), 'downloading' => __('正在下载...', 'yoone-subscriptions') ) )); } } // 初始化 new Yoone_Admin_Logs();