Status > Logs (source: postex). function postexketab_log($message, $context = null, $level = 'debug') { if (!postexketab_log_enabled() || !function_exists('wc_get_logger')) { return; } $logger = wc_get_logger(); if (!$logger) { return; } if ($context !== null) { $message .= ' ' . wp_json_encode( postexketab_log_redact($context), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT ); } $logger->log($level, $message, array('source' => POSTEXKETAB_LOG_SOURCE)); } /** * Mask the API key and other secrets before they reach the log file. * Log files under uploads/wc-logs are readable by anyone who can guess the * filename, so the key must never be written in full. */ function postexketab_log_redact($data) { $secret_keys = array('x-api-key', 'api_key', 'apikey', 'authorization', 'token', 'access_token', 'password'); if (is_object($data)) { $data = (array)$data; } if (!is_array($data)) { return $data; } foreach ($data as $key => $value) { if (is_array($value) || is_object($value)) { $data[$key] = postexketab_log_redact($value); continue; } if (in_array(strtolower((string)$key), $secret_keys, true)) { $data[$key] = postexketab_log_mask($value); } } return $data; } function postexketab_log_mask($value) { $value = (string)$value; if ($value === '') { return '(empty)'; } return substr($value, 0, 4) . '...' . substr($value, -4) . ' (len ' . strlen($value) . ')'; }