oont-contents/plugins/tiktok-for-business/logging/Logger.php
2025-03-31 21:42:48 +02:00

137 lines
3.3 KiB
PHP

<?php
/**
* Copyright (c) Bytedance, Inc. and its affiliates. All Rights Reserved
*
* This source code is licensed under the license found in the
* LICENSE file in the root directory of this source tree.
*
* @package TikTok
*/
if ( ! defined( 'ABSPATH' ) ) {
die;
}
/**
* Class responsible for logging
*/
class Logger {
/**
* The log_file_name.
*
* @var string
*/
protected $log_file_name;
/**
* The constructor
*
* @param WC_Logger_Interface $logger The wc_get_logger interface.
*/
public function __construct() {
$this->log_file_name = 'tiktok_for_woocommerce';
}
/**
* Log errors and debugging messages
*
* @param string $method The class/function where the message occurred.
* @param string $message The message to be logged.
* @param string $level The level/context of the message.
*
* @return void
*/
public function log( $method, $message, $level = 'debug' ) {
if ( ! did_action( 'woocommerce_loaded' ) > 0 ) {
return;
}
$logger = wc_get_logger();
$handler = array( 'source' => $this->log_file_name );
$info = "{$method}: {$message}";
$logger->log( $level, $info, $handler );
}
/**
* Helper for Logging API requests.
*
* @param string $url The URL of the request.
* @param array $args The Arguments of the request.
* @param string $level The default level/context of the message to be logged.
*
* @return void
*/
public function log_request( $url, $args, $level = 'debug' ) {
$method = isset( $args['method'] ) ? $args['method'] : 'POST';
$data = isset( $args['body'] ) ? $args['body'] : '--- EMPTY STRING ---';
$doing_ajax = $this->doing_ajax() ? 'yes' : 'no';
self::log( $method, "{$url}\n\n{$data}\n ajax: {$doing_ajax}", $level );
// Only want to console log pixel fire
if ( 'POST' === $method && strpos( $url, 'pixel/track' ) ) {
$this->maybe_output_pixel_data( json_encode( $data ) );
}
}
/**
* Possibly output the pixel debugging data.
*
* @param string $data
*
* @return void
*/
protected function maybe_output_pixel_data( $data ) {
if ( ! apply_filters( 'tiktok_for_business_should_output_pixel_debug', true ) ) {
return;
}
// Scenarios where we never want to output, regardless of the filter above.
$should_not_output = is_admin()
|| $this->doing_ajax()
|| ( defined( 'WP_CLI' ) && WP_CLI )
|| ( defined( 'REST_REQUEST' ) && REST_REQUEST );
if ( $should_not_output ) {
return;
}
?>
<script>
console.log("TikTok pixel fire.");
console.log(<?php echo json_encode( $data ); ?>);
</script>
<?php
}
/**
* Return whether this is an AJAX request.
*
* @return bool
*/
protected function doing_ajax() {
return defined( 'DOING_AJAX' ) && DOING_AJAX;
}
/**
* Helper for Logging API responses.
*
* @param string $method The method where the log occurred.
* @param array $response The body of the response.
* @param string $level The default level/context of the message to be logged.
*
* @return void
*/
public function log_response( $method, $response, $level = 'debug' ) {
if ( is_wp_error( $response ) ) {
$level = 'error';
$data = "{$response->get_error_code()}: {$response->get_error_message()}";
} else {
$data = $response['http_response']->get_response_object()->raw;
}
self::log( $method, 'Response: ' . "\n\n" . $data . "\n", $level );
}
}