PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 1.6.3
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v1.6.3
3.5.2 3.5.1 3.5.0 3.4.8 3.4.7 3.4.6 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5.1 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.10 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.6.1 1.6.7 1.7.0 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.2 1.7.2.1 1.7.2.2 1.7.3 1.7.4 1.7.5 1.7.5.1 1.7.5.2 1.7.6 1.7.7 1.7.7.1 1.7.7.2 1.7.8 1.7.9 1.8.0 1.8.0.1 1.8.1 1.8.2 1.8.2.1 1.8.2.2 1.8.2.3 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.0.1 1.9.1 1.9.2 1.9.3 1.9.4 1.9.4.1 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.0.1 2.0.1 2.0.2 2.0.3 2.0.3.1 2.0.4 2.0.4.1 2.0.5 2.0.6 2.0.7 2.0.8 2.0.8.1 2.0.9 3.0.0 3.0.0.1 3.0.1 3.0.2 3.0.3 3.0.3.1 3.0.4 3.0.4.1 3.0.4.2 3.0.5 3.0.5.1 3.0.5.2 3.0.6 3.0.6.1 3.0.7.1 3.0.8 3.0.8.1 3.0.9 3.0.9.1 3.0.9.2 3.0.9.3 3.0.9.4 3.0.9.5 3.1.0 3.1.1 3.1.2 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.4.0 3.4.1 3.4.2 3.4.2.1 3.4.3 3.4.4 3.4.5 trunk 1.0 1.0.1 1.0.2 1.0.3
everest-forms / includes / class-evf-logger.php
everest-forms / includes Last commit date
abstracts 6 years ago admin 6 years ago export 6 years ago fields 6 years ago interfaces 8 years ago libraries 7 years ago log-handlers 6 years ago shortcodes 6 years ago templates 6 years ago class-everest-forms.php 6 years ago class-evf-ajax.php 6 years ago class-evf-autoloader.php 7 years ago class-evf-background-updater.php 7 years ago class-evf-cache-helper.php 6 years ago class-evf-deprecated-action-hooks.php 6 years ago class-evf-deprecated-filter-hooks.php 7 years ago class-evf-emails.php 6 years ago class-evf-fields.php 6 years ago class-evf-form-block.php 6 years ago class-evf-form-handler.php 6 years ago class-evf-form-task.php 6 years ago class-evf-forms-features.php 6 years ago class-evf-frontend-scripts.php 6 years ago class-evf-install.php 6 years ago class-evf-integrations.php 7 years ago class-evf-log-levels.php 8 years ago class-evf-logger.php 6 years ago class-evf-post-types.php 6 years ago class-evf-privacy.php 6 years ago class-evf-session-handler.php 7 years ago class-evf-shortcodes.php 7 years ago class-evf-smart-tags.php 6 years ago class-evf-template-loader.php 6 years ago class-evf-validation.php 6 years ago evf-conditional-functions.php 6 years ago evf-core-functions.php 6 years ago evf-deprecated-functions.php 6 years ago evf-entry-functions.php 6 years ago evf-formatting-functions.php 6 years ago evf-notice-functions.php 6 years ago evf-template-functions.php 6 years ago evf-template-hooks.php 7 years ago evf-update-functions.php 6 years ago
class-evf-logger.php
298 lines
1 <?php
2 /**
3 * Provides logging capabilities for debugging purposes.
4 *
5 * @class EVF_Logger
6 * @version 1.0.0
7 * @package EverestForms/Classes
8 */
9
10 defined( 'ABSPATH' ) || exit;
11
12 /**
13 * EVF_Logger class
14 */
15 class EVF_Logger implements EVF_Logger_Interface {
16
17 /**
18 * Stores registered log handlers.
19 *
20 * @var array
21 */
22 protected $handlers;
23
24 /**
25 * Minimum log level this handler will process.
26 *
27 * @var int Integer representation of minimum log level to handle.
28 */
29 protected $threshold;
30
31 /**
32 * Constructor for the logger.
33 *
34 * @param array $handlers Optional. Array of log handlers. If $handlers is not provided, the filter 'everest_forms_register_log_handlers' will be used to define the handlers. If $handlers is provided, the filter will not be applied and the handlers will be used directly.
35 * @param string $threshold Optional. Define an explicit threshold. May be configured via EVF_LOG_THRESHOLD. By default, all logs will be processed.
36 */
37 public function __construct( $handlers = null, $threshold = null ) {
38 if ( null === $handlers ) {
39 $handlers = apply_filters( 'everest_forms_register_log_handlers', array() );
40 }
41
42 $register_handlers = array();
43
44 if ( ! empty( $handlers ) && is_array( $handlers ) ) {
45 foreach ( $handlers as $handler ) {
46 $implements = class_implements( $handler );
47 if ( is_object( $handler ) && is_array( $implements ) && in_array( 'EVF_Log_Handler_Interface', $implements, true ) ) {
48 $register_handlers[] = $handler;
49 } else {
50 evf_doing_it_wrong(
51 __METHOD__,
52 sprintf(
53 /* translators: 1: class name 2: EVF_Log_Handler_Interface */
54 __( 'The provided handler %1$s does not implement %2$s.', 'everest-forms' ),
55 '<code>' . esc_html( is_object( $handler ) ? get_class( $handler ) : $handler ) . '</code>',
56 '<code>EVF_Log_Handler_Interface</code>'
57 ),
58 '1.0'
59 );
60 }
61 }
62 }
63
64 if ( null !== $threshold ) {
65 $threshold = EVF_Log_Levels::get_level_severity( $threshold );
66 } elseif ( defined( 'EVF_LOG_THRESHOLD' ) && EVF_Log_Levels::is_valid_level( EVF_LOG_THRESHOLD ) ) {
67 $threshold = EVF_Log_Levels::get_level_severity( EVF_LOG_THRESHOLD );
68 } else {
69 $threshold = null;
70 }
71
72 $this->handlers = $register_handlers;
73 $this->threshold = $threshold;
74 }
75
76 /**
77 * Determine whether to handle or ignore log.
78 *
79 * @param string $level emergency|alert|critical|error|warning|notice|info|debug.
80 * @return bool True if the log should be handled.
81 */
82 protected function should_handle( $level ) {
83 if ( null === $this->threshold ) {
84 return true;
85 }
86 return $this->threshold <= EVF_Log_Levels::get_level_severity( $level );
87 }
88
89 /**
90 * Add a log entry.
91 *
92 * This is not the preferred method for adding log messages. Please use log() or any one of
93 * the level methods (debug(), info(), etc.). This method may be deprecated in the future.
94 *
95 * @param string $handle File handle.
96 * @param string $message Message to log.
97 * @param string $level Logging level.
98 *
99 * @return bool
100 */
101 public function add( $handle, $message, $level = EVF_Log_Levels::NOTICE ) {
102 $message = apply_filters( 'everest_forms_logger_add_message', $message, $handle );
103 $this->log(
104 $level,
105 $message,
106 array(
107 'source' => $handle,
108 '_legacy' => true,
109 )
110 );
111 evf_do_deprecated_action( 'everest_forms_log_add', array( $handle, $message ), '1.2', 'This action has been deprecated with no alternative.' );
112 return true;
113 }
114
115 /**
116 * Add a log entry.
117 *
118 * @param string $level One of the following:
119 * 'emergency': System is unusable.
120 * 'alert': Action must be taken immediately.
121 * 'critical': Critical conditions.
122 * 'error': Error conditions.
123 * 'warning': Warning conditions.
124 * 'notice': Normal but significant condition.
125 * 'info': Informational messages.
126 * 'debug': Debug-level messages.
127 * @param string $message Log message.
128 * @param array $context Optional. Additional information for log handlers.
129 */
130 public function log( $level, $message, $context = array() ) {
131 if ( ! EVF_Log_Levels::is_valid_level( $level ) ) {
132 /* translators: 1: EVF_Logger::log 2: level */
133 evf_doing_it_wrong( __METHOD__, sprintf( __( '%1$s was called with an invalid level "%2$s".', 'everest-forms' ), '<code>EVF_Logger::log</code>', $level ), '1.2' );
134 }
135
136 if ( $this->should_handle( $level ) ) {
137 $message = apply_filters( 'everest_forms_logger_log_message', $message, $level, $context );
138
139 foreach ( $this->handlers as $handler ) {
140 $handler->handle( time(), $level, $message, $context );
141 }
142 }
143 }
144
145 /**
146 * Adds an emergency level message.
147 *
148 * System is unusable.
149 *
150 * @see EVF_Logger::log
151 *
152 * @param string $message Message to log.
153 * @param array $context Log context.
154 */
155 public function emergency( $message, $context = array() ) {
156 $this->log( EVF_Log_Levels::EMERGENCY, $message, $context );
157 }
158
159 /**
160 * Adds an alert level message.
161 *
162 * Action must be taken immediately.
163 * Example: Entire website down, database unavailable, etc.
164 *
165 * @see EVF_Logger::log
166 *
167 * @param string $message Message to log.
168 * @param array $context Log context.
169 */
170 public function alert( $message, $context = array() ) {
171 $this->log( EVF_Log_Levels::ALERT, $message, $context );
172 }
173
174 /**
175 * Adds a critical level message.
176 *
177 * Critical conditions.
178 * Example: Application component unavailable, unexpected exception.
179 *
180 * @see EVF_Logger::log
181 *
182 * @param string $message Message to log.
183 * @param array $context Log context.
184 */
185 public function critical( $message, $context = array() ) {
186 $this->log( EVF_Log_Levels::CRITICAL, $message, $context );
187 }
188
189 /**
190 * Adds an error level message.
191 *
192 * Runtime errors that do not require immediate action but should typically be logged
193 * and monitored.
194 *
195 * @see EVF_Logger::log
196 *
197 * @param string $message Message to log.
198 * @param array $context Log context.
199 */
200 public function error( $message, $context = array() ) {
201 $this->log( EVF_Log_Levels::ERROR, $message, $context );
202 }
203
204 /**
205 * Adds a warning level message.
206 *
207 * Exceptional occurrences that are not errors.
208 *
209 * Example: Use of deprecated APIs, poor use of an API, undesirable things that are not
210 * necessarily wrong.
211 *
212 * @see EVF_Logger::log
213 *
214 * @param string $message Message to log.
215 * @param array $context Log context.
216 */
217 public function warning( $message, $context = array() ) {
218 $this->log( EVF_Log_Levels::WARNING, $message, $context );
219 }
220
221 /**
222 * Adds a notice level message.
223 *
224 * Normal but significant events.
225 *
226 * @see EVF_Logger::log
227 *
228 * @param string $message Message to log.
229 * @param array $context Log context.
230 */
231 public function notice( $message, $context = array() ) {
232 $this->log( EVF_Log_Levels::NOTICE, $message, $context );
233 }
234
235 /**
236 * Adds a info level message.
237 *
238 * Interesting events.
239 * Example: User logs in, SQL logs.
240 *
241 * @see EVF_Logger::log
242 *
243 * @param string $message Message to log.
244 * @param array $context Log context.
245 */
246 public function info( $message, $context = array() ) {
247 $this->log( EVF_Log_Levels::INFO, $message, $context );
248 }
249
250 /**
251 * Adds a debug level message.
252 *
253 * Detailed debug information.
254 *
255 * @see EVF_Logger::log
256 *
257 * @param string $message Message to log.
258 * @param array $context Log context.
259 */
260 public function debug( $message, $context = array() ) {
261 $this->log( EVF_Log_Levels::DEBUG, $message, $context );
262 }
263
264 /**
265 * Clear entries from chosen file.
266 *
267 * @param string $source Source/handle to clear.
268 * @return bool
269 */
270 public function clear( $source = '' ) {
271 if ( ! $source ) {
272 return false;
273 }
274 foreach ( $this->handlers as $handler ) {
275 if ( is_callable( array( $handler, 'clear' ) ) ) {
276 $handler->clear( $source );
277 }
278 }
279 return true;
280 }
281
282 /**
283 * Clear all logs older than a defined number of days. Defaults to 30 days.
284 *
285 * @since 1.6.2
286 */
287 public function clear_expired_logs() {
288 $days = absint( apply_filters( 'everest_forms_logger_days_to_retain_logs', 30 ) );
289 $timestamp = strtotime( "-{$days} days" );
290
291 foreach ( $this->handlers as $handler ) {
292 if ( is_callable( array( $handler, 'delete_logs_before_timestamp' ) ) ) {
293 $handler->delete_logs_before_timestamp( $timestamp );
294 }
295 }
296 }
297 }
298