<?php if ( ! class_exists( 'WC_Connect_Logger' ) ) { class WC_Connect_Logger { /** * @var WC_Logger */ private $logger; private $is_logging_enabled = false; private $is_debug_enabled = false; private $feature; public function __construct( WC_Logger $logger, $feature = '' ) { $this->logger = $logger; $this->feature = strtolower( $feature ); $this->is_logging_enabled = WC_Connect_Options::get_option( 'debug_logging_enabled', false ); $this->is_debug_enabled = WC_Connect_Options::get_option( 'debug_display_enabled', false ); } /** * Format a message with optional context for logging. * * @param string|WP_Error $message Either a string message, or WP_Error object. * @param string $context Optional. Context for the logged message. * @return string The formatted log message. */ protected function format_message( $message, $context = '' ) { $formatted_message = $message; if ( is_wp_error( $message ) ) { $formatted_message = $message->get_error_code() . ' ' . $message->get_error_message(); } if ( ! empty( $context ) ) { $formatted_message .= ' (' . $context . ')'; } return $formatted_message; } public function enable_logging() { WC_Connect_Options::update_option( 'debug_logging_enabled', true ); $this->is_logging_enabled = true; $this->log( 'Logging enabled' ); } public function disable_logging() { $this->log( 'Logging disabled' ); WC_Connect_Options::update_option( 'debug_logging_enabled', false ); $this->is_logging_enabled = false; } public function enable_debug() { WC_Connect_Options::update_option( 'debug_display_enabled', true ); $this->is_debug_enabled = true; $this->log( 'Debug enabled' ); } public function disable_debug() { $this->log( 'Debug disabled' ); WC_Connect_Options::update_option( 'debug_display_enabled', false ); $this->is_debug_enabled = false; } public function is_debug_enabled() { return $this->is_debug_enabled; } public function is_logging_enabled() { return $this->is_logging_enabled; } /** * Log debug by printing it as notice when debugging is enabled. * * @param string $message Debug message. * @param string $type Notice type. */ public function debug( $message, $type = 'notice' ) { if ( $this->is_debug_enabled() && ! wc_has_notice( $message, $type ) ) { wc_add_notice( $message, $type ); } } /** * Logs messages even if debugging is disabled * * @param string $message Message to log * @param string $context Optional context (e.g. a class or function name) */ public function error( $message, $context = '' ) { WC_Connect_Error_Notice::instance()->enable_notice( $message ); $this->log( $message, $context, true ); } /** * Logs messages to file and error_log if WP_DEBUG * * @param string $message Message to log * @param string $context Optional context (e.g. a class or function name) */ public function log( $message, $context = '', $force = false ) { $log_message = $this->format_message( $message, $context ); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( $log_message ); } if ( ! $this->is_logging_enabled() && ! $force ) { return; } $log_file = 'wc-services'; if ( ! empty( $this->feature ) ) { $log_file .= '-' . $this->feature; } $this->logger->add( $log_file, $log_message ); } } }