oont-contents/plugins/webappick-product-feed-for-woocommerce/V5/Utility/Logs.php
2025-03-31 21:42:48 +02:00

195 lines
4.9 KiB
PHP

<?php
namespace CTXFeed\V5\Utility;
use CTXFeed\V5\Common\Helper;
use Exception;
use WC_Logger;
use CTXFeed\V5\Utility\CTX_WC_Log_Handler;
/**
* Log Helper Functions
*
* @package CTXFeed
* @subpackage CTX_WC_Log_Handler
* @since WooFeed 3.3.0
* @version 1.0.0
* @author Ohidul Islam <wahid0003@gmail.com>
* @copyright WebAppick
*/
class Logs {
private static $is_debug_enabled;
public function __construct() {
self::$is_debug_enabled = Helper::is_debugging_enabled();
}
public static function get_logger() {
if ( ! class_exists( CTX_WC_Log_Handler::class ) ) {
return false;
}
static $logger = null;
if ( $logger instanceof \WC_Logger ) {
return $logger;
}
if ( ! class_exists( 'WC_Logger' ) ) {
return $logger;
}
return new WC_Logger( [ new CTX_WC_Log_Handler() ] );
}
/**
* Write message to log file.
* Write log message if debugging is enabled
*
* @param string $source will be use for log file name.
* @param string $message Log message.
* @param string $level One of the following:
* 'emergency': System is unusable.
* 'alert': Action must be taken immediately.
* 'critical': Critical conditions.
* 'error': Error conditions.
* 'warning': Warning conditions.
* 'notice': Normal but significant condition.
* 'info': Informational messages.
* 'debug': Debug-level messages.
* @param mixed $data Extra data for the log handler.
* @param bool $force_log ignore debugging settings
* @param bool $wc_log log data in wc-logs directory
*
* @return void
* @since 3.2.1
*
*/
public static function write_log( $source, $message, $level = 'debug', $data = null, $force_log = true, $wc_log = false ) {
if ( true === $force_log || Helper::is_debugging_enabled() ) {
if ( ! in_array( $level, [
'emergency',
'alert',
'critical',
'critical',
'error',
'warning',
'notice',
'info',
'debug',
], true ) ) {
return;
}
$context = [ 'source' => $source ];
if ( is_array( $data ) ) {
if ( isset( $data['source'] ) ) {
unset( $data['source'] );
}
$context = array_merge( $context, $data );
} else {
$context['data'] = $data;
}
$loggers = [ self::get_logger() ];
if ( true === $wc_log && function_exists( 'wc_get_logger' ) ) {
$loggers[] = wc_get_logger();
}
foreach ( $loggers as $logger ) {
if ( is_callable( [ $logger, $level ] ) ) {
$logger->$level( $message . PHP_EOL, $context );
}
}
}
}
/**
* Log Fatal Errors in both wc-logs and woo-feed/logs
*
* @param string $message The log message.
* @param mixed $data Extra data for the log handler.
*/
public static function write_fatal_log( $message, $data = null ) {
// woocommerce use 'fatal-errors' as log handler...
// make no conflicts with woocommerce fatal-errors logs
self::write_log( 'ctx-feed-fatal-errors', $message, 'critical', $data, true, true );
}
/**
* Log Fatal Errors in both wc-logs and woo-feed/logs
*
* @param string $message The log message.
* @param mixed $data Extra data for the log handler.
*/
public static function write_debug_log( $message, $data = null ) {
// woocommerce use 'fatal-errors' as log handler...
// make no conflicts with woocommerce fatal-errors logs
self::write_log( 'ctx-feed-fatal-errors', $message, 'debug', $data, true, true );
}
/**
* Delete Log file by source or handle name
*
* @param string $source log source or handle name
* @param bool $handle use source as handle
*
* @return bool
*/
public static function delete_log( $source, $handle = false ) {
$log_handler = new CTX_WC_Log_Handler();
try {
if ( 'ctx-feed-fatal-errors' === $source ) {
// fatal error are also logged in wc-logs dir.
if ( class_exists( 'WC_Log_Handler_File', false ) ) {
$source = false === $handle ? $log_handler::get_log_file_name( $source ) : $source;
$log_handler = new \WC_Log_Handler_File();
return $log_handler->remove( $source );
}
} else {
$source = ! $handle ? $log_handler::get_log_file_name( $source ) : $source;
return $log_handler->remove( $source );
}
} catch ( Exception $e ) {
return false;
}
return false;
}
/**
* Delete all log files.
*
* @return void
*/
public static function delete_all_logs() {
// delete the fatal error log
self::delete_log( 'ctx-feed-fatal-errors' );
// get all logs
$logs = CTX_WC_Log_Handler::get_log_files();
foreach ( $logs as $log ) {
self::delete_log( $log, true );
}
}
/**
* Trigger logging cleanup using the logging class.
*
* @return void
*/
public static function cleanup_logs() {
$logger = self::get_logger();
if ( is_callable( array( $logger, 'clear_expired_logs' ) ) ) {
$logger->clear_expired_logs();
}
}
}
// End of file logs class.