PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.20.2
GiveWP – Donation Plugin and Fundraising Platform v2.20.2
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 4 years ago Commands 4 years ago Helpers 4 years ago Migrations 4 years ago ValueObjects 4 years ago Assets.php 4 years ago Log.php 4 years ago LogFactory.php 4 years ago LogModel.php 4 years ago LogRepository.php 4 years ago LogServiceProvider.php 4 years ago
Log.php
184 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.20.0 add sensitive information redaction; store context as arrays for JSON serialization
15 * @since 2.19.6 added debug
16 * @since 2.10.0
17 *
18 * @note There are two special keywords used in the context that are representing category and source.
19 * The default value for the Category is "Core" and for the source is "Give Core"
20 * If you want to change the category and/or source, you should provide them as context attributes.
21 * Source and category attributes should be written lowercase.
22 *
23 * @example
24 *
25 * Log::error( 'Error message', [
26 * 'category' => 'Payment',
27 * 'source' => 'Stripe add-on'
28 * ] );
29 *
30 * @note Use as many contexts attributes as you need. The more the better.
31 *
32 * @example
33 *
34 * Log::error( 'Error message', [
35 * 'category' => 'Payment',
36 * 'source' => 'Stripe add-on',
37 * 'donation_id' => $donationId,
38 * 'donor_id' => $donorId
39 * ] );
40 *
41 * @note You can use an array or object as a context attribute value.
42 *
43 * @example
44 *
45 * try {
46 * something();
47 * } catch ( Exception $exception ) {
48 * Log::error( 'Something went wrong', [
49 * 'exception' => $exception,
50 * 'additional_info' => [
51 * 'donation_id' => $donationId
52 * ]
53 * ] );
54 * }
55 *
56 *
57 * @method static error(string $message, array $context = [])
58 * @method static warning(string $message, array $context = [])
59 * @method static notice(string $message, array $context = [])
60 * @method static success(string $message, array $context = [])
61 * @method static info(string $message, array $context = [])
62 * @method static http(string $message, array $context = [])
63 * @method static spam(string $message, array $context = [])
64 * @method static debug(string $message, array $context = [])
65 */
66 class Log
67 {
68 public function __call($name, $arguments)
69 {
70 list ($message, $context) = array_pad($arguments, 2, null);
71
72 if (is_array($context)) {
73 $context = $this->serializeAndRedactContext($context);
74
75 // Default fields
76 $data = array_filter(
77 $context,
78 function ($key) {
79 return array_key_exists($key, LogFactory::getDefaults());
80 },
81 ARRAY_FILTER_USE_KEY
82 );
83
84 // Additional context
85 $data['context'] = array_diff(
86 $context,
87 $data
88 );
89 }
90
91 // Set message
92 if (!is_null($message)) {
93 $data['message'] = $message;
94 }
95
96 // Set type
97 $data['type'] = $name;
98
99 try {
100 $log = LogFactory::makeFromArray($data);
101 $log->save();
102
103 return $log;
104 } catch (Exception $exception) {
105 error_log($exception->getMessage());
106 }
107 }
108
109 /**
110 * Takes the context array, serializes it, and redacts sensitive data.
111 *
112 * @since 2.20.0
113 */
114 private function serializeAndRedactContext(array $context): array
115 {
116 $redactedData = [];
117
118 foreach ($context as $key => $value) {
119 foreach (self::getRedactionList() as $redaction) {
120 if (stripos($key, $redaction) !== false) {
121 $redactedData[$key] = '[[redacted]]';
122 continue 2;
123 }
124 }
125
126 if (is_array($value)) {
127 $value = $this->serializeAndRedactContext($value);
128 } elseif (is_object($value)) {
129 $value = $this->serializeAndRedactContext(
130 array_merge(
131 ['Object Class' => get_class($value)],
132 (array)$value
133 )
134 );
135 }
136
137 $redactedData[$key] = $value;
138 }
139
140 return $redactedData;
141 }
142
143 /**
144 * Static helper for calling the logger methods
145 *
146 * @since 2.19.6 added conditional for logging debug()
147 * @since 2.18.0 - always log errors, warnings & only log all if WP_DEBUG_LOG is enabled
148 * @since 2.11.1
149 *
150 * @param array $arguments
151 *
152 * @param string $name
153 */
154 public static function __callStatic($name, $arguments)
155 {
156 /** @var Log $logger */
157 $logger = give(__CLASS__);
158
159 if ($name !== LogType::DEBUG && (in_array($name, ['error', 'warning']) || Environment::isWPDebugLogEnabled())) {
160 call_user_func_array([$logger, $name], $arguments);
161 }
162
163 if (Environment::isGiveDebugEnabled()) {
164 call_user_func_array([$logger, $name], $arguments);
165 }
166 }
167
168 /**
169 * @since 2.20.0
170 *
171 * Retrieves the redaction list after applying filters.
172 */
173 public static function getRedactionList(): array
174 {
175 static $list = null;
176
177 if ($list === null) {
178 $list = apply_filters('give_log_redaction_list', ['card', 'password', 'secret', 'token']);
179 }
180
181 return $list;
182 }
183 }
184