PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.1
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Log / Log.php
give / src / Log Last commit date
Admin 1 year ago Commands 4 years ago Helpers 4 years ago Migrations 9 months ago ValueObjects 3 years ago Assets.php 1 year ago Log.php 1 year ago LogFactory.php 4 years ago LogModel.php 4 years ago LogRepository.php 4 years ago LogServiceProvider.php 4 years ago
Log.php
185 lines
1 <?php
2
3 namespace Give\Log;
4
5 use Exception;
6 use Give\Log\Helpers\Environment;
7 use Give\Log\ValueObjects\LogType;
8
9 /**
10 * Class Log
11 *
12 * The static facade intended to be the primary way of logging within GiveWP to make life easier.
13 *
14 * @since 2.21.0 Use array_diff_key to filter context data to prevent php warning with multi-dimension array
15 * @since 2.20.0 add sensitive information redaction; store context as arrays for JSON serialization
16 * @since 2.19.6 added debug
17 * @since 2.10.0
18 *
19 * @note There are two special keywords used in the context that are representing category and source.
20 * The default value for the Category is "Core" and for the source is "Give Core"
21 * If you want to change the category and/or source, you should provide them as context attributes.
22 * Source and category attributes should be written lowercase.
23 *
24 * @example
25 *
26 * Log::error( 'Error message', [
27 * 'category' => 'Payment',
28 * 'source' => 'Stripe add-on'
29 * ] );
30 *
31 * @note Use as many contexts attributes as you need. The more the better.
32 *
33 * @example
34 *
35 * Log::error( 'Error message', [
36 * 'category' => 'Payment',
37 * 'source' => 'Stripe add-on',
38 * 'donation_id' => $donationId,
39 * 'donor_id' => $donorId
40 * ] );
41 *
42 * @note You can use an array or object as a context attribute value.
43 *
44 * @example
45 *
46 * try {
47 * something();
48 * } catch ( Exception $exception ) {
49 * Log::error( 'Something went wrong', [
50 * 'exception' => $exception,
51 * 'additional_info' => [
52 * 'donation_id' => $donationId
53 * ]
54 * ] );
55 * }
56 *
57 *
58 * @method static void error(string $message, array $context = [])
59 * @method static void warning(string $message, array $context = [])
60 * @method static void notice(string $message, array $context = [])
61 * @method static void success(string $message, array $context = [])
62 * @method static void info(string $message, array $context = [])
63 * @method static void http(string $message, array $context = [])
64 * @method static void spam(string $message, array $context = [])
65 * @method static void debug(string $message, array $context = [])
66 */
67 class Log
68 {
69 public function __call($name, $arguments)
70 {
71 list ($message, $context) = array_pad($arguments, 2, null);
72
73 if (is_array($context)) {
74 $context = $this->serializeAndRedactContext($context);
75
76 // Default fields
77 $data = array_filter(
78 $context,
79 function ($key) {
80 return array_key_exists($key, LogFactory::getDefaults());
81 },
82 ARRAY_FILTER_USE_KEY
83 );
84
85 // Additional context
86 $data['context'] = array_diff_key(
87 $context,
88 $data
89 );
90 }
91
92 // Set message
93 if (!is_null($message)) {
94 $data['message'] = $message;
95 }
96
97 // Set type
98 $data['type'] = $name;
99
100 try {
101 $log = LogFactory::makeFromArray($data);
102 $log->save();
103
104 return $log;
105 } catch (Exception $exception) {
106 error_log($exception->getMessage());
107 }
108 }
109
110 /**
111 * Takes the context array, serializes it, and redacts sensitive data.
112 *
113 * @since 2.20.0
114 */
115 private function serializeAndRedactContext(array $context): array
116 {
117 $redactedData = [];
118
119 foreach ($context as $key => $value) {
120 foreach (self::getRedactionList() as $redaction) {
121 if (stripos($key, $redaction) !== false) {
122 $redactedData[$key] = '[[redacted]]';
123 continue 2;
124 }
125 }
126
127 if (is_array($value)) {
128 $value = $this->serializeAndRedactContext($value);
129 } elseif (is_object($value)) {
130 $value = $this->serializeAndRedactContext(
131 array_merge(
132 ['Object Class' => get_class($value)],
133 (array)$value
134 )
135 );
136 }
137
138 $redactedData[$key] = $value;
139 }
140
141 return $redactedData;
142 }
143
144 /**
145 * Static helper for calling the logger methods
146 *
147 * @since 2.19.6 added conditional for logging debug()
148 * @since 2.18.0 - always log errors, warnings & only log all if WP_DEBUG_LOG is enabled
149 * @since 2.11.1
150 *
151 * @param array $arguments
152 *
153 * @param string $name
154 */
155 public static function __callStatic($name, $arguments)
156 {
157 /** @var Log $logger */
158 $logger = give(__CLASS__);
159
160 if ($name !== LogType::DEBUG && (in_array($name, ['error', 'warning']) || Environment::isWPDebugLogEnabled())) {
161 call_user_func_array([$logger, $name], $arguments);
162 }
163
164 if (Environment::isGiveDebugEnabled()) {
165 call_user_func_array([$logger, $name], $arguments);
166 }
167 }
168
169 /**
170 * @since 2.20.0
171 *
172 * Retrieves the redaction list after applying filters.
173 */
174 public static function getRedactionList(): array
175 {
176 static $list = null;
177
178 if ($list === null) {
179 $list = apply_filters('give_log_redaction_list', ['card', 'password', 'secret', 'token']);
180 }
181
182 return $list;
183 }
184 }
185