232 lines
6.9 KiB
PHP
232 lines
6.9 KiB
PHP
<?php
|
|
/**
|
|
* Log Helper Functions
|
|
* @package WooFeed
|
|
* @subpackage WooFeed_Helper_Functions
|
|
* @version 1.0.0
|
|
* @since WooFeed 3.3.0
|
|
* @author KD <mhamudul.hk@gmail.com>
|
|
* @copyright WebAppick
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
die(); // Silence...
|
|
}
|
|
/** @define "WOO_FEED_FREE_ADMIN_PATH" "./../admin/" */ // phpcs:ignore
|
|
|
|
if ( ! function_exists( 'woo_feed_is_debugging_enabled' ) ) {
|
|
function woo_feed_is_debugging_enabled() { // TODO moved to V5 Helper class
|
|
return woo_feed_get_options( 'enable_error_debugging', false ) === 'on';
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_get_logger' ) ) {
|
|
/**
|
|
* Get The logger.
|
|
*
|
|
* Example:
|
|
* woo_feed_get_logger()->debug( 'Test log', [ 'source' => 'test-debug' ] );
|
|
*
|
|
* @since 3.2.1
|
|
*
|
|
* @return mixed
|
|
*/
|
|
function woo_feed_get_logger() {
|
|
|
|
if ( ! class_exists( "Woo_Feed_Log_Handler_File" ) ) {
|
|
return false;
|
|
}
|
|
|
|
static $logger = null;
|
|
if ( null !== $logger && is_a( $logger, 'WC_Logger' ) ) {
|
|
return $logger;
|
|
}
|
|
|
|
if ( ! class_exists('WC_Logger') ) {
|
|
return $logger;
|
|
}
|
|
|
|
$logger = new WC_Logger( [ new Woo_Feed_Log_Handler_File() ] );
|
|
|
|
return $logger;
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_log_errors_at_shutdown' ) ) {
|
|
/**
|
|
* Shutdown log handler
|
|
* @since 3.2.1
|
|
* @return void
|
|
*/
|
|
function woo_feed_log_errors_at_shutdown(){
|
|
$error = error_get_last();
|
|
if ( $error && in_array( $error['type'], array( E_ERROR, E_PARSE, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR ), true ) ) {
|
|
/* translators: 1: error message 2: file name and path 3: line number */
|
|
$message = sprintf( __( '%1$s in %2$s on line %3$s', 'woo-feed' ), $error['message'], $error['file'], $error['line'] );
|
|
woo_feed_log_fatal_error( $message );
|
|
do_action( 'woo_feed_shutdown_error', $error );
|
|
}
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_log' ) ) {
|
|
/**
|
|
* Write message to log file.
|
|
* Write log message if debugging is enable
|
|
*
|
|
* @since 3.2.1
|
|
*
|
|
* @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
|
|
*/
|
|
function woo_feed_log( $source, $message, $level = 'debug', $data = null, $force_log = false, $wc_log = false ) {
|
|
if ( woo_feed_is_debugging_enabled() || true === $force_log ) {
|
|
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 = [ woo_feed_get_logger() ];
|
|
if ( true === $wc_log ) {
|
|
if( function_exists( 'wc_get_logger' ) ) {
|
|
$loggers[] = wc_get_logger();
|
|
}
|
|
}
|
|
foreach ( $loggers as $logger ) {
|
|
if ( is_callable( [ $logger, $level ] ) ) {
|
|
$logger->$level( $message . PHP_EOL, $context );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_log_fatal_error' ) ) {
|
|
/**
|
|
* 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.
|
|
*/
|
|
function woo_feed_log_fatal_error( $message, $data = null ) {
|
|
// woocommerce use 'fatal-errors' as log handler...
|
|
// make no conflicts with woocommerce fatal-errors logs
|
|
woo_feed_log( 'woo-feed-fatal-errors', $message, 'critical', $data, true, true );
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_log_debug_message' ) ) {
|
|
/**
|
|
* 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.
|
|
*/
|
|
function woo_feed_log_debug_message( $message, $data = null ) {
|
|
// woocommerce use 'fatal-errors' as log handler...
|
|
// make no conflicts with woocommerce fatal-errors logs
|
|
woo_feed_log( 'woo-feed-fatal-errors', $message, 'debug', $data, true, true );
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_delete_log' ) ) {
|
|
/**
|
|
* 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
|
|
*/
|
|
function woo_feed_delete_log( $source, $handle = false ) {
|
|
|
|
if ( ! class_exists( "Woo_Feed_Log_Handler_File" ) ) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
if ( 'woo-feed-fatal-errors' === $source ) {
|
|
// fatal error are also logged in wc-logs dir.
|
|
if ( class_exists( 'WC_Log_Handler_File', false ) ) {
|
|
$log_handler = new WC_Log_Handler_File();
|
|
$log_handler->remove( false === $handle ? WC_Log_Handler_File::get_log_file_name( $source ) : $source );
|
|
}
|
|
}elseif ( class_exists( 'Woo_Feed_Log_Handler_File', false ) ) {
|
|
$feed_log_handler = new Woo_Feed_Log_Handler_File();
|
|
return $feed_log_handler->remove( false == $handle ? Woo_Feed_Log_Handler_File::get_log_file_name( $source ) : $source );
|
|
}
|
|
} catch ( Exception $e ) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_delete_all_logs' ) ) {
|
|
function woo_feed_delete_all_logs() {
|
|
// delete the fatal error log
|
|
woo_feed_delete_log( 'woo-feed-fatal-errors' );
|
|
// get all logs
|
|
$logs = Woo_Feed_Log_Handler_File::get_log_files();
|
|
foreach ( array_values( $logs ) as $log ) {
|
|
woo_feed_delete_log( $log, true );
|
|
}
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_log_feed_process' ) ) {
|
|
/**
|
|
* Log Feed Generation Progress to individual log file.
|
|
*
|
|
* @since 3.2.1
|
|
*
|
|
* @param string $feed_name Feed name, will be use for log file name.
|
|
* @param string $message Log message.
|
|
* @param mixed $data Extra data for the log handler.
|
|
* @param bool $force_log ignore debugging settings
|
|
*
|
|
* @return void
|
|
*/
|
|
function woo_feed_log_feed_process( $feed_name, $message, $data = null, $force_log = false ) {
|
|
woo_feed_log( $feed_name, $message, 'debug', $data, $force_log, false );
|
|
}
|
|
}
|
|
if ( ! function_exists( 'woo_feed_cleanup_logs' ) ) {
|
|
/**
|
|
* Trigger logging cleanup using the logging class.
|
|
* @return void
|
|
*/
|
|
function woo_feed_cleanup_logs() {
|
|
$logger = woo_feed_get_logger();
|
|
// @TODO dont' clear all logs.
|
|
// @TODO clear only the error log.
|
|
// @TODO change shutdown function and send the main error log to wc-logs directory.
|
|
if ( is_callable( array( $logger, 'clear_expired_logs' ) ) ) {
|
|
$logger->clear_expired_logs();
|
|
}
|
|
}
|
|
}
|
|
|
|
// End of file log-helper.php.
|