PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / trunk
ووسلام – همگام سازی ووکامرس و باسلام vtrunk
1.10.17 1.10.15 1.10.14 1.10.13 1.10.12 1.10.10 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 1.10.1 1.10.0 1.9.2 1.9.1 1.9.0 1.8.8 1.8.5 1.8.6 1.8.7 1.8.4 1.7.6 All 50 releases
sync-basalam / includes / Logger / WooLogger.php

WooLogger.php in ووسلام – همگام سازی ووکامرس و باسلام trunk, at includes/Logger/WooLogger.php

110 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SyncBasalam\Logger;
4
5 use SyncBasalam\Utilities\DateConverter;
6
7 defined('ABSPATH') || exit;
8
9 class WooLogger implements LoggerInterface
10 {
11 public static function getLogs()
12 {
13 if (!current_user_can('manage_options')) {
14 return [
15 'error' => 'ش�
16 ا دسترسی لاز�
17 برای �
18 شاهده لاگ‌ها را ندارید.',
19 ];
20 }
21
22 $uploadDir = wp_upload_dir();
23 $logDir = trailingslashit($uploadDir['basedir']) . 'wc-logs/';
24
25 $logFiles = glob($logDir . 'basalam-sync-plugin*.log');
26
27 if (empty($logFiles)) {
28 return [
29 'error' => 'هیچ لاگی یافت نشد.',
30 ];
31 }
32
33 usort($logFiles, fn($a, $b) => filemtime($b) <=> filemtime($a));
34
35 $logFilesToRead = array_slice($logFiles, 0, 3);
36 $logFilesToDelete = array_slice($logFiles, 3);
37
38 foreach ($logFilesToDelete as $oldFile) {
39 @unlink($oldFile);
40 }
41
42 $allLogs = [];
43
44 foreach ($logFilesToRead as $logFile) {
45 if (!is_readable($logFile)) continue;
46
47 $lines = file($logFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
48
49 foreach (array_reverse($lines) as $line) {
50 if (!preg_match(
51 '/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}) (INFO|WARNING|ERROR|DEBUG|ALERT) (.*?)( CONTEXT: (.*))?$/',
52 $line,
53 $matches
54 )) {
55 continue;
56 }
57
58 $jalaliDate = DateConverter::utcToJalaliDateTime($matches[1]);
59 if ($jalaliDate === null) continue;
60
61 $context = isset($matches[5]) ? json_decode($matches[5], true) : null;
62
63 $allLogs[] = [
64 'date' => $jalaliDate,
65 'level' => $matches[2],
66 'message' => $matches[3],
67 'context' => $context,
68 ];
69 }
70 }
71
72 $logsByLevel = [
73 'info' => [],
74 'warning' => [],
75 'error' => [],
76 'debug' => [],
77 'alert' => [],
78 ];
79
80 foreach ($allLogs as $log) {
81 $logsByLevel[strtolower($log['level'])][] = $log;
82 }
83
84 return [
85 'logs_by_level' => $logsByLevel,
86 'current_tab' => $_GET['tab'] ?? 'info',
87 'current_page' => isset($_GET['paged']) ? max(1, intval(wp_unslash($_GET['paged']))) : 1,
88 'per_page' => 10,
89 ];
90 }
91
92 public function log($level, $message, $context = [])
93 {
94 $logger = wc_get_logger();
95
96 $context = array_merge(
97 is_array($context) ? $context : [],
98 ['source' => 'basalam-sync-plugin']
99 );
100
101 $logger->log($level, $message, $context);
102 }
103
104 public function info($message, $context = []) { $this->log('info', $message, $context); }
105 public function debug($message, $context = []) { $this->log('debug', $message, $context); }
106 public function warning($message, $context = []) { $this->log('warning', $message, $context); }
107 public function error($message, $context = []) { $this->log('error', $message, $context); }
108 public function alert($message, $context = []) { $this->log('alert', $message, $context); }
109 }
110