', '..' ); $filename = Util_Debug::log_filename( $module ); return @file_put_contents( $filename, '[' . date( 'r' ) . '] ' . $message . "\n", FILE_APPEND ); } /** * Log cache purge event */ static public function log_purge( $module, $message, $parameters = null, $explicit_postfix = null ) { $backtrace = debug_backtrace( 0 ); $backtrace_lines = array(); $pos = 0; for ( $n = 2; $n < count( $backtrace ); $n++ ) { if ( !Util_Debug::log_purge_should_print_item( $backtrace, $n ) ) { continue; } $i = $backtrace[$n]; $filename = isset( $i['file'] ) ? $i['file'] : ''; $filename = str_replace( ABSPATH, '', $filename ); $line = isset( $i['line'] ) ? $i['line'] : ''; $method = ( !empty( $i['class'] ) ? $i['class'] . '--' : '' ) . $i['function']; $args = ' ' . Util_Debug::encode_params( $i['args'] ); $backtrace_lines[] = "\t#" . ( $pos ) . ' ' . $filename . '(' . $line . '): ' . $method . $args; $pos++; } $message = $message; if ( !is_null( $parameters ) ) { $message .= Util_Debug::encode_params( $parameters ); } $user = function_exists( 'wp_get_current_user' ) ? wp_get_current_user() : null; $username = ( empty( $user ) ? 'anonymous' : $user->user_login ); $message .= "\n\tusername:$username"; if ( is_array( $explicit_postfix ) ) { $message .= "\n\t" . implode( "\n\t", $explicit_postfix ); } $message .= "\n" . implode( "\n", $backtrace_lines ); return Util_Debug::log( $module . '-purge', $message ); } static private function log_purge_should_print_item( $backtrace, $n ) { if ( !empty( $backtrace[$n]['class']) && $backtrace[$n]['class'] == 'W3TC\\CacheFlush_Locally' ) { return false; } if ( !empty( $backtrace[$n]['class']) && $backtrace[$n]['class'] == 'WP_Hook' && !empty( $backtrace[$n + 1]['function'] ) ) { $f = $backtrace[$n + 1]['function']; if ( $f == 'do_action' || $f == 'apply_filters' ) { return false; } return Util_Debug::log_purge_should_print_item( $backtrace, $n + 1 ); } return true; } static private function encode_params( $args ) { $args_strings = array(); if ( !is_array( $args ) ) { $s = (string)$args; if ( strlen( $s ) > 100 ) { $s = substr( $s, 0, 98 ) . '..'; } $args_strings[] = $s; } else { foreach ( $args as $arg ) { $s = json_encode( $arg, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ); if ( strlen( $s ) > 100 ) { $s = substr( $s, 0, 98 ) . '..'; } $args_strings[] = $s; } } return '(' . implode( ', ', $args_strings ) . ')'; } /** * Clean debug output with label headers. */ static public function debug( $label, $data ) { error_log('===============Debug ' . $label . ' Start==============='); error_log(print_r($data,true)); error_log('===============Debug ' . $label . ' End==============='); } }