Enable remote logging feature flag (#50351)
* Enable remote logging feature flag * Do not send log in local or dev envs * Add changelog * Fix env check
This commit is contained in:
parent
a307c22d1e
commit
c37795d694
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: update
|
||||||
|
|
||||||
|
Enable remote logging feature flag
|
|
@ -253,7 +253,7 @@ class FeaturesController {
|
||||||
'Enable this feature to log errors and related data to Automattic servers for debugging purposes and to improve WooCommerce',
|
'Enable this feature to log errors and related data to Automattic servers for debugging purposes and to improve WooCommerce',
|
||||||
'woocommerce'
|
'woocommerce'
|
||||||
),
|
),
|
||||||
'enabled_by_default' => false,
|
'enabled_by_default' => true,
|
||||||
'disable_ui' => true,
|
'disable_ui' => true,
|
||||||
'is_legacy' => false,
|
'is_legacy' => false,
|
||||||
'is_experimental' => true,
|
'is_experimental' => true,
|
||||||
|
|
|
@ -89,6 +89,10 @@ class RemoteLogger extends \WC_Log_Handler {
|
||||||
|
|
||||||
WC_Rate_Limiter::set_rate_limit( self::RATE_LIMIT_ID, self::RATE_LIMIT_DELAY );
|
WC_Rate_Limiter::set_rate_limit( self::RATE_LIMIT_ID, self::RATE_LIMIT_DELAY );
|
||||||
|
|
||||||
|
if ( $this->is_dev_or_local_environment() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$response = wp_safe_remote_post(
|
$response = wp_safe_remote_post(
|
||||||
self::LOG_ENDPOINT,
|
self::LOG_ENDPOINT,
|
||||||
array(
|
array(
|
||||||
|
@ -407,4 +411,15 @@ class RemoteLogger extends \WC_Log_Handler {
|
||||||
|
|
||||||
return implode( "\n", $sanitized_trace );
|
return implode( "\n", $sanitized_trace );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the current environment is development or local.
|
||||||
|
*
|
||||||
|
* Creates a helper method so we can easily mock this in tests.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function is_dev_or_local_environment() {
|
||||||
|
return in_array( wp_get_environment_type(), array( 'development', 'local' ), true );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -386,14 +386,30 @@ class RemoteLoggerTest extends \WC_Unit_Test_Case {
|
||||||
$this->assertFalse( $this->sut->handle( time(), 'error', 'Test message', array() ) );
|
$this->assertFalse( $this->sut->handle( time(), 'error', 'Test message', array() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Test handle() method does not send logs in dev environment
|
||||||
|
*/
|
||||||
|
public function test_handle_does_not_send_logs_in_dev_environment() {
|
||||||
|
$this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class )
|
||||||
|
->setMethods( array( 'is_remote_logging_allowed' ) )
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->sut->set_is_dev_or_local( true );
|
||||||
|
$this->sut->method( 'is_remote_logging_allowed' )->willReturn( true );
|
||||||
|
$result = $this->sut->handle( time(), 'error', 'Test message', array() );
|
||||||
|
|
||||||
|
$this->assertFalse( $result, 'Handle should return false in dev environment' );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Test handle() method successfully sends log.
|
* @testdox Test handle() method successfully sends log.
|
||||||
*/
|
*/
|
||||||
public function test_handle_successful() {
|
public function test_handle_successful() {
|
||||||
$this->sut = $this->getMockBuilder( RemoteLogger::class )
|
$this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class )
|
||||||
->onlyMethods( array( 'is_remote_logging_allowed' ) )
|
->setMethods( array( 'is_remote_logging_allowed' ) )
|
||||||
->getMock();
|
->getMock();
|
||||||
|
|
||||||
|
$this->sut->set_is_dev_or_local( false );
|
||||||
$this->sut->method( 'is_remote_logging_allowed' )->willReturn( true );
|
$this->sut->method( 'is_remote_logging_allowed' )->willReturn( true );
|
||||||
|
|
||||||
// Mock wp_safe_remote_post using pre_http_request filter.
|
// Mock wp_safe_remote_post using pre_http_request filter.
|
||||||
|
@ -427,11 +443,12 @@ class RemoteLoggerTest extends \WC_Unit_Test_Case {
|
||||||
$mock_local_logger->expects( $this->once() )
|
$mock_local_logger->expects( $this->once() )
|
||||||
->method( 'error' );
|
->method( 'error' );
|
||||||
|
|
||||||
$this->sut = $this->getMockBuilder( RemoteLogger::class )
|
$this->sut = $this->getMockBuilder( RemoteLoggerWithEnvironmentOverride::class )
|
||||||
->setConstructorArgs( array( $mock_local_logger ) )
|
->setConstructorArgs( array( $mock_local_logger ) )
|
||||||
->onlyMethods( array( 'is_remote_logging_allowed' ) )
|
->onlyMethods( array( 'is_remote_logging_allowed' ) )
|
||||||
->getMock();
|
->getMock();
|
||||||
|
|
||||||
|
$this->sut->set_is_dev_or_local( false );
|
||||||
$this->sut->method( 'is_remote_logging_allowed' )->willReturn( true );
|
$this->sut->method( 'is_remote_logging_allowed' )->willReturn( true );
|
||||||
|
|
||||||
// Mock wp_safe_remote_post to throw an exception using pre_http_request filter.
|
// Mock wp_safe_remote_post to throw an exception using pre_http_request filter.
|
||||||
|
@ -551,3 +568,34 @@ class RemoteLoggerTest extends \WC_Unit_Test_Case {
|
||||||
return $method->invokeArgs( $obj, $parameters );
|
return $method->invokeArgs( $obj, $parameters );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//phpcs:disable Generic.Files.OneObjectStructurePerFile.MultipleFound, Squiz.Classes.ClassFileName.NoMatch
|
||||||
|
/**
|
||||||
|
* Mock class that extends RemoteLogger to allow overriding is_dev_or_local_environment.
|
||||||
|
*/
|
||||||
|
class RemoteLoggerWithEnvironmentOverride extends RemoteLogger {
|
||||||
|
/**
|
||||||
|
* The is_dev_or_local value.
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
private $is_dev_or_local = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the is_dev_or_local value.
|
||||||
|
*
|
||||||
|
* @param bool $value The value to set.
|
||||||
|
*/
|
||||||
|
public function set_is_dev_or_local( $value ) {
|
||||||
|
$this->is_dev_or_local = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected function is_dev_or_local_environment() {
|
||||||
|
return $this->is_dev_or_local;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//phpcs:enable Generic.Files.OneObjectStructurePerFile.MultipleFound, Squiz.Classes.ClassFileName.NoMatch
|
||||||
|
|
Loading…
Reference in New Issue